•Backend
spring启动流程
Spring启动流程
JavaSpring
Spring启动流程
-
创建 ApplicationContext
- XML配置:使用ClassPathXmlApplicationContext读取XML里的
- 注解配置:使用AnnotationConfigApplicationContext加载基于注解的配置类(如@Service,@Component等)
- XML配置:使用ClassPathXmlApplicationContext读取XML里的
-
初始化 BeanFactory 并加载 Bean 定义
- 创建
DefaultListableBeanFactory - 扫描注解类或解析 XML
<bean>,生成BeanDefinition - 注册
BeanDefinition到BeanFactory中
注意:此时 Bean 还未实例化,只是生成了元信息。
- 创建
-
解析BeanDefinitions
- 提取Bean的元数据,包括Bean的类名,作用域,依赖关系等,为后续 Bean 实例化和依赖注入做准备
-
实例化非懒加载单例 Bean
-
调用 Bean 的构造方法生成对象
-
仅非懒加载单例 Bean 会在容器刷新阶段实例化
-
-
依赖注入
- 通过构造器,或setter或字段注入bean的依赖关系
-
执行初始化回调
执行顺序:
- @PostConstruct
- InitializingBean.afterPropertiesSet()
- 自定义
init-method
-
处理BeanPostProcessors
- postProcessBeforeInitialization:在初始化回调之前执行
- postProcessAfterInitialization:初始化回调之后执行,可用于 AOP 代理增强
-
发布容器刷新事件
- 发布事件ContextRefreshedEvent,表示容器刷新完成,所有非懒加载单例 Bean 已初始化完毕
-
完成启动
- 可以通过getBean获取
Bean生命周期顺序总结:构造方法 -> 依赖注入 -> @PostConstruct -> afterPropertiesSet -> init-method -> postProcessAfterInitialization