SpringBoot 启动与 Bean 生命周期核心流程
SpringBoot 项目启动时,会解析启动类上的 @ComponentScan 注解(默认扫描启动类所在包)。扫描器利用 ASM 框架读取包下 .class 文件的字节码,获取 MetadataReader(包含类名、注解等元数据)。
接着,判断类上是否有 @Component 或 @Configuration 等注解,如果有,就生成一个 BeanDefinition 对象(相当于“施工图纸”)。此时 Bean 还未被实例化,而是将 BeanDefinition 注册到容器内部的 Map 中(Key 为 beanName,Value 为 BeanDefinition)。
当所有的 BeanDefinition 注册完毕后,Spring 开始遍历 Map,对非懒加载的单例 Bean 执行创建流程:
- 实例化(Instantiation):根据 BeanDefinition 中的类名,通过反射调用构造器(无参或带参)创建出“半成品”对象。
- 属性注入(Populate):通过反射将依赖注入到对象的字段或 Setter 方法中。
- Aware 接口回调:将 BeanName、ApplicationContext 等底层组件注入给当前 Bean。
- 前置 BeanPostProcessor:执行所有后置处理器的前置方法(AOP 代理通常在此阶段创建)。
- 初始化(Initialization):依次执行 @PostConstruct、InitializingBean.afterPropertiesSet() 以及自定义的 init-method。
- 后置 BeanPostProcessor:执行所有后置处理器的后置方法。
- 放入单例池:将创建完毕的完整 Bean 对象放入 singletonObjects(单例池)Map 中,等待被使用。

浙公网安备 33010602011771号