Spring bean初始化及销毁你必须要掌握的回调方法

LogicPulseMaster
• 阅读 1768

Spring bean初始化及销毁你必须要掌握的回调方法

spring bean在初始化和销毁的时候我们可以触发一些自定义的回调操作。

初始化的时候实现的方法

1、通过java提供的@PostConstruct注解;

2、通过实现spring提供的InitializingBean接口,并重写其afterPropertiesSet方法;

3、通过spring的xml bean配置或bean注解指定初始化方法,如下面实例的initMethod方法通过@bean注解指定。

销毁的时候实现的方法

1、通过java提供的@PreDestroy注释;

2、通过实现spring提供的DisposableBean接口,并重写其destroy方法;

3、通过spring的xml bean配置或bean注解指定销毁方法,如下面实例的destroyMethod方法通过@bean注解指定。

初始、销毁顺序是怎样的呢?

我们通过一个简单的测试安全来验证一下,分别把它们都派上用场。

Spring bean初始化及销毁你必须要掌握的回调方法

上图为要加载并销毁的bean类。

Spring bean初始化及销毁你必须要掌握的回调方法

上图为测试并加载spring容器类,输出这个方法得到以下结果。

===Constructor===

===@PostConstruct===

===InitializingBean afterPropertiesSet===

===initMethod===

===@PreDestroy===

===DisposableBean distroy===

===destroyMethod===
结论

从测试结果看出来的结果可以总结初始和销毁对应的顺序为:

初始:类构造器 > @PostConstruct > InitializingBean > init-method

销毁:@PreDestroy > DisposableBean > destroyMethod

可能还有别的初始、销毁的实现方法,欢迎留言和我交流。

推荐去我的博客阅读更多:

1.Java JVM、集合、多线程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、后端、架构、阿里巴巴等大厂最新面试题

觉得不错,别忘了点赞+转发哦!

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Souleigh ✨ Souleigh ✨
4年前
Vue 的 三种 watcher
userwatcher在页面中使用的watcher,即用户定义的watcher,用于观察一个属性的更新,支持数组定义多个,对象定义单个的形式,在initWatcher中进行watcher的初始化之后,在渲染函数进行数据的读取,触发依赖收集时会将userwatcher的依赖收集进去,data属性set更新时会被触发userwatcher所定义的回调函数(将新旧
浩浩 浩浩
4年前
【Flutter实战】单选框和复选框
3.6单选开关和复选框Material组件库中提供了Material风格的单选开关Switch和复选框Checkbox,虽然它们都是继承自StatefulWidget,但它们本身不会保存当前选中状态,选中状态都是由父组件来管理的。当Switch或Checkbox被点击时,会触发它们的onChanged回调,我们可以在此回调中处
菜园前端 菜园前端
2年前
什么是回调函数?
原文链接:什么是回调函数?简单的来说,一个函数作为另外一个函数的参数,可以称为回调函数。这个理解其实不完全对,回调的意义根本没有体现出来,何为回调?也就是说一个函数你定义了,你没有马上的去调用它,而是交给了另外一个函数去调用,这才属于回调函数。缺点直接使用
Easter79 Easter79
3年前
Spring中管理Bean依赖注入之后和Bean销毁之前的行为
    对于Singleton作用域的Bean,Spring容器将会跟踪它们的生命周期,容器知道何时实例化结束、何时销毁。Spring可以管理Bean在实例化结束之后和Bean销毁之前的行为。Bean依赖关系注入之后的行为:    Spring提供了两种方式在Bean全部属性设置成功后执行特定的行为:在Spring配置文件
Stella981 Stella981
3年前
Spring Bean 生命周期回调
Spring生命周期回调说明如果只是简单的对象初始化,我们可以将其放到构造器中处理;如果是对注入的类或者帮助类做一些初始化处理,可以考虑使用初始化方法。Spring提供了很多的扩展点,其中就有生命周期回调,我们可以在bean初始化之前做一些处理,在bean销毁之前做一些处理。早期Spring生命周期扩展方式Initializ
Stella981 Stella981
3年前
NodeJs中nextTick、setTimeout、setImmediate运行顺序解析
setImmediate该方法用来把一些需要长时间运行的操作放在一个回调函数里,在浏览器完成后面的其他语句后,就立刻执行这个回调函数。setImmediate是宏任务,优先级是比定时任务低的。除非在定时任务中。测试代码:setImmediate(function(){console.log("setImmediate");
Stella981 Stella981
3年前
AVIOInterruptCB结构体分析
1AVIOInterruptCB结构体定义在/usr/include/libavformat/avio.h中有如下的结构体定义,根据头文件中的注释:这是一个回调函数和参数的结构体。有些函数是在阻塞的,用这个回调函数来检查是否中断这个阻塞函数,如果回调函数返回1,那么这个正在阻塞的操作将被中止。那么就用这个结构体里的参数opaque来回调其中的callb
Stella981 Stella981
3年前
SpringAOP源码跟踪及学习
Spring版本4.3.2在拿到Bean实例以后,会经历一系列的初始化工作,如:工厂回调、init方法、后处理器在Bean初始化前后的处理等,在一般情况下(非factorymethod创建的Bean等),AOP代理对象的创建就在后处理器的处理方法中实现。入口以AbstractAutowireCapableB
Stella981 Stella981
3年前
JavaScript回调函数的高手指南
摘要:本文将会解释回调函数的概念,同时帮你区分两种回调:同步和异步。回调函数是每个前端程序员都应该知道的概念之一。回调可用于数组、计时器函数、promise、事件处理中。本文将会解释回调函数的概念,同时帮你区分两种回调:同步和异步。1.回调函数首先写一个向人打招呼的函数。只需要创建一个接受name参数的函数gree
Stella981 Stella981
3年前
Spring 异步调用,多线程,一行代码实现
Spring异步调用,多线程概述快速入门异步回调异步异常处理自定义执行器1、概述在日常开发中,我们的逻辑都是同步调用,顺序