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

作者

神奇宝贝大师

发布于

2019-05-28

更新于

2022-03-20

许可协议

评论