在上一篇文章中,我们已经完成了 Node.js 的入门与环境安装。本节我们将聚焦于全局对象的学习,这是理解 Node.js 语法与运行机制的重要基础。为了方便大家理解,我们将通过与浏览器环境中的 window对象进行类比,来系统梳理 Node.js 全局对象的相关知识。 本文内容: Node程序传递
上一篇文章我们主要分析了 Bean 创建过程的源码,特别是在 doCreateBean 方法的末尾提到了与 Bean 销毁相关的逻辑代码。这说明在 Bean 的创建阶段就已经与它的销毁机制建立了联系——Spring 会在创建时判断该 Bean 是否需要销毁,并收集对应的销毁方法。当然,此时并不会直接
为什么需要理解Spring配置类? 在Spring框架的日常开发中,我们经常会使用@Configuration、@Component等注解来定义配置类。但你是否曾想过: 为什么有的配置类使用@Configuration,有的只用@Component?</
前面我们主要学习了Spring启动过程中的的扫描逻辑和一些前置的铺垫知识,扫描主要是获取到BeanDefinition。获取后其实就是要基于BeanDefinition去创建Bean对象了。上篇文章中我们分析FactoryBean时,其实已经开始分析getBean方法了。那么从这一篇文章开始将进入g
注意:前面学习了ComponentsIndex机制,在学习本文前请把META-INF/spring.components这个文件里面的内容删除或者注释,否则会有影响。 这个文件本质是一个properties的格式,所以可以用#注释,Java原生方法读取会忽略被注释的行。 为什么先学习FactoryB
在前面看Spring源码的过程中,有下面的代码: public AnnotationConfigApplicationContext() { StartupStep createAnnotatedBeanDefReader = getApplicationStartup().start("s
在分析BeanDefinition扫描过程源码时,@ComponentScan注解中有一个ScopedProxyMode,本节我们来了解下它的作用和原理。 内容回顾 其实源码中有两个地方有这个ScopedProxyMode,一个处是在org.springframework.context.annot
我在分析BeanDefnition扫描过程中,有下面这样一段源码: org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#findCandidateComponents public Se
经过前两篇文章的学习,我们已经具备了阅读源码的基础。接下来,我们将正式进入 Spring Bean 生命周期 的学习。 建议的学习路径是:先理解 Bean 的生命周期,再分析容器的启动过程。原因在于: 1. Bean 的扫描与注册是生命周期的起点 容器启动时所做的核心工作之一,就是扫描并解析 Bea