【spring源码系列】之【Bean的销毁】
以“冬奥之光,多彩冰灯”为主题的第四十一届全国专业冰雕比赛在冰城哈尔滨市进入第二天,60名冰雕高手在哈尔滨冰灯艺术游园会园区展开激烈的竞技比拼。
冰雕艺术
1. 概述
Bean的销毁是Bean的生命周期中最后一步,比如在Tomcat等容器关闭的时候会调用Bean的销毁方法,下面逐步分析。
2. 源码分析
在bean创建完成后,就会对这个bean注册一个销毁的Adapter对象,
registerDisposableBeanIfNecessary
方法中disposableBeans
集合负责收集需要销毁的bean
。
DisposableBeanAdapter
对象就是负责 bean
销毁的类,这个类中收集 bean
是否实现了 DisposableBean
接口
是否配置 destroy-method
属性,过滤了 DestructionAwareBeanPostProcessor
类型的接口,如下图所示:
然后 bean
是在什么时候被销毁呢,在 tomcat
关闭的时候就会调用到 servlet
中的销毁方法,具体是通过类ContextLoaderListener.java
中的contextDestroyed
方法,通过 closeWebApplicationContext
方法一直往下找此为 servlet
规范的使用,一路往下调用。
最终会进入DisposableBeanAdapter
类中的destroy
,方法该方法就会根据前面的收集进行调用。
销毁bean的顺序是如下:
1)判断是否需要处理@PreDestroy
注解的bean
,如果需要,则通过beanpostProcessor
实现类 InitDestroyAnnotationBeanPostProcessor
处理;
2)判断是否需要处理实现DisposableBean
接口的bean
的销毁;
3)判断是否需要处理配置文件中的bean
配置了destroy-method
的bean
的销毁。
3. 案例演示
定义Bean
,同时加入销毁对应的三种方法;
配置文件如下:
测试类:
有人可能会问,为何Bean
可以多次销毁,其实Bean
的销毁并不是真正意义上的销毁Bean
,而是在销毁前执行销毁方法,可能包含关闭数据库连接、关闭网络请求等逻辑操作,而后真正的销毁是由Spring
容器执行关闭,其内部Bean
也就自然而然消失了,Bean
销毁是发生在Spring
容器关闭过程中的。
__EOF__

本文链接:https://www.cnblogs.com/father-of-little-pig/p/15962244.html
关于博主:不要为了技术而技术,总结分享技术,感恩点滴生活!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY