Spring生命周期
[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/Spring/Spring-life-cycle.html
以以下为准:
1. 获取beanDefinition
通过loadBeanDefinitions() -> 读取配置文件 -> 解析配置文件 -> 封装成BeanDefinition -> 注册到BeanDefinitionRegistry的beanDefinitionMap中
- 扩展1:BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry
获取BeanDefinitionRegistry,增删改BeanDefinition,因为后续按此顺序创建
- 扩展2:BeanFactoryPostProcessor.postProcessBeanFactory
BeanDefinition加载完成之后,但实例化bean之前进行一些额外的处理
这时候所有的bean定义都已加载,但还没有实例化任何bean。这允许覆盖或添加属性,甚至是对急于初始化的bean
2. 遍历beanDefinitionMap,实例化bean
- 扩展: 实例化前后处理
InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation
InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation
3. 依赖注入(populateBean)–这里通过三级缓存解决循环依赖
- 扩展: 属性填充前后的处理
- 填充设值前: InstantiationAwareBeanPostProcessor.postProcessPropertyValues
- 设值后: InitializingBean.afterPropertiesSet()
4. 初始化bean
- 扩展: init-method
初始化前后:BeanPostProcessor.postProcessBeforeInitialization和BeanPostProcessor.postProcessAfterInitialization
5. 销毁bean
- 扩展: destroy-method
- 销毁前: DisposableBean.destroy