总结#现在,Bean销毁阶段的逻辑已经全部理解完毕

文章插图
- 调用DestructionAwareBeanPostProcessor的before销毁方法
- 如果实现了DisposableBean , 调用它的Destroy方法
- 调用自定义destroy-method方法
- 说明:真正意义上的销毁(从容器中移除bean)是在AbstractApplicationContext.close方法中实现的,在此方法中不仅会将bean从容器中移除,还会调用到我们实现的这些回调相关的方法 。
- 从BeanDefinition获取Bean信息
- 调用
InstantiationAwareBeanPostProcessor
的before实例化方法 - 如果它返回一个对象,那么直接进入该对象的初始化后方法
- 否则,它返回null,进入正常的Bean生命周期
- 实例化Bean
- 调用
populateBean
,该方法的目的是对Bean属性进行设置 - 调用
InstantiationAwareBeanPostProcessor
的after实例化方法,该方法的返回值决定是否跳过属性设置阶段 - 解析该Bean的pvs,自动注入该pvs
- 调用
InstantiationAwareBeanPostProcessor
中两个和属性设置有关的方法 , 允许它们对属性进行动态修改 - 调用
initializingBean
进入初始化阶段 - 检测Bean实现了哪些Aware接口 , 调用它们
- 调用所有
BeanPostProcessor
的before初始化方法,该方法可以返回Bean的一个代理 - 如果Bean是
InitializingBean
,调用它的afterPropertiesSet
方法 - 如果Bean设置了启动方法,调用启动方法
- 调用所有
BeanPostProcessor
的after初始化方法,该方法可以返回Bean的一个代理 - 调用
destroyBean
进入Bean销毁阶段 - 创建
DisposableBeanAdapter
, 它负责对Bean的销毁进行生命周期方法的调用 - 调用所有
DestructionAwareBeanPostProcessor
的before销毁方法 - 如果是
DisposableBean
,调用destroy
方法 - 如果设置了
destroy-method
, 调用它
推荐阅读
- 详解AQS中的condition源码原理
- 怎么去巴基斯坦去巴基斯坦时需要注意什么(从中国去巴基斯坦怎么去)
- 有到过伊拉克的人吗应该怎么去(从国内怎样到伊拉克)
- 从ObjectPool到CAS指令
- 蜘蛛的丝是从哪里吐出来的?
- .net 温故知新:【8】.NET 中的配置从xml转向json
- iqoo7电池多大_iqoo7电池多少毫安
- 【lwip】08-ARP协议一图笔记及源码实现
- <一>从指令角度了解函数堆栈调用过程
- 【lwip】07-链路层收发以太网数据帧源码分析