从BeanFactory源码看Bean的生命周期( 八 )

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

从BeanFactory源码看Bean的生命周期

文章插图
  1. 调用DestructionAwareBeanPostProcessor的before销毁方法
  2. 如果实现了DisposableBean , 调用它的Destroy方法
  3. 调用自定义destroy-method方法
  4. 说明:真正意义上的销毁(从容器中移除bean)是在AbstractApplicationContext.close方法中实现的,在此方法中不仅会将bean从容器中移除,还会调用到我们实现的这些回调相关的方法 。
最后的总结#
  1. 从BeanDefinition获取Bean信息
  2. 调用InstantiationAwareBeanPostProcessor的before实例化方法
  3. 如果它返回一个对象,那么直接进入该对象的初始化后方法
  4. 否则,它返回null,进入正常的Bean生命周期
  5. 实例化Bean
  6. 调用populateBean,该方法的目的是对Bean属性进行设置
  7. 调用InstantiationAwareBeanPostProcessor的after实例化方法,该方法的返回值决定是否跳过属性设置阶段
  8. 解析该Bean的pvs,自动注入该pvs
  9. 调用InstantiationAwareBeanPostProcessor中两个和属性设置有关的方法 , 允许它们对属性进行动态修改
  10. 调用initializingBean进入初始化阶段
  11. 检测Bean实现了哪些Aware接口 , 调用它们
  12. 调用所有BeanPostProcessor的before初始化方法,该方法可以返回Bean的一个代理
  13. 如果Bean是InitializingBean,调用它的afterPropertiesSet方法
  14. 如果Bean设置了启动方法,调用启动方法
  15. 调用所有BeanPostProcessor的after初始化方法,该方法可以返回Bean的一个代理
  16. 调用destroyBean进入Bean销毁阶段
  17. 创建DisposableBeanAdapter , 它负责对Bean的销毁进行生命周期方法的调用
  18. 调用所有DestructionAwareBeanPostProcessor的before销毁方法
  19. 如果是DisposableBean,调用destroy方法
  20. 如果设置了destroy-method , 调用它
参考原文链接:https://www.cnblogs.com/lilpig/p/16477006.html

推荐阅读