spring源码分析系列5:ApplicationContext的初始化与Bean生命周期
Bean的完整生命周期分为四个阶段:
-
第一阶段:实例化阶段。
从Bean定义的收集到BeanDefinition的入库顺序执行
BeanDefinitionRegistryPostProcessor注册处理器,注册一些BeanDefinition
BeanFactoryPostProcessor,对入库的BeanDefinition进行定义的修改。
BeanWrapper的产生,BeanWrapper是Bean的早期产品。
populateBean()执行属性的设置
总结:此阶段是BeanDefinition->BeanWrapper ,各种属性的设置 -
第二阶段:初始化阶段:主要是执行各种初始化方法
invokeAwareMethods(beanName, bean);执行Aware属性的相关设置。
BeanPostProcessor.postProcessBeforeInitialization前置方法的执行,
如果实现了InitializingBean.afterPropertiesSet()则执行此方法
执行自定义的initMethod方法。
BeanPostProcessor.postProcessBeforeInitialization后置方法的执行, -
第三阶段:使用阶段
getBean从容器的缓存中取出Bean -
第四阶段:销毁阶段
执行DisposableBean.distroy方法
执行自定义detry-method
总结:
整个spring初始化过程可以看做是
- 物料(BeanDefinition)的搜集入库(BeanFactory)
- 生产线(getBean())取出物料创建成品(Bean)
- 成品(Bean)入库(BeanFactory)
欢迎大家关注我的公众号【源码行动】,最新个人理解及时奉送。https://www.cnblogs.com/smallstudent/p/11691358.html