Spring中Bean的几种实现初始化(或销毁)的方式及其执行顺序

声明本文测试环境为SpringBoot。

提示本文以图片说明为主,文字版的测试代码,可见文末的代码托管链接。


       有时,我们需要在bean创建后(或者bean销毁前),做一些事情,方式方法有很多,下面介绍如何通过【初始化/销毁相关方法】来达到我们的目的。


常用初始化后(或销毁前)做逻辑的方式

  1. 实现InitializingBean接口、DisposableBean接口。

  2. 使用@PostConstruct注解、@PreDestroy注解。

  3. 指定init-method方法、destory-method方法。

  4. 实现BeanPostProcessor接口。

  5. ……

相关执行顺序及方法

初始化时:

                                                初始化时的执行顺序及方法

构造方法

BeanPostProcessor接口的postProcessBeforeInitialization方法

@PostConstruct标注的方法

InitializingBean接口的afterPropertiesSet方法

@Bean时,指定的initMethod方法

BeanPostProcessor接口的postProcessAfterInitialization方法

销毁时:

                                                   销毁时的执行顺序及方法

@PreDestroy标注的方法

DisposableBean接口的destroy方法

@Bean时,指定的destroyMethod方法

注:上面的初始化方法、销毁时方法,能生效的前提是,该Bean的生命周期是交由Spring进行管理的。若该Bean的
        生命周期是交由Spring进行管理的,但
该Bean是采用的懒加载模式,那么只有当第一次使用到该Bean时,才会
        进行构造,进而才会进行初始化。


验证测试

先给出几个相关的类:

Abc:

MyBeanPostProcessor:

注:之所以不直接用Abc实现BeanPostProcessor接口,是因为:如果用Abc实现BeanPostProcessor接口的话,
       其注册进SpringIOC容器的处理器的postProcessBeforeInitialization方法和postProcessAfterInitialization
       方法,只会对在Abc后面才注册进SpringIOC容器的Bean起效果,对于Abc本身,是没有效果的。

Xyz:

注:在这里通过@Bean将Abc的声明周期交由Spring进行管理,同时指定其初始化方法、销毁方法。

注:如果注入Abc时,采用的是懒加载,那么只有当程序第一次用到Abc时,才会走其构造以及后面紧接着的相关初始化方法。

测试一下

运行一个空的测试方法:

控制台输出:

注:虽然测试方法是空的,但是容器中的bean还是会走一个完整的生命周期的。

 

^_^ 如有不当之处,欢迎指正

^_^ 参考链接
              
https://blog.csdn.net/qq_41075649/article/details/83382763

^_^ 测试代码托管链接
              
https://github.com/JustryDeng/CommonRepository

^_^ 本文已经被收录进《程序员成长笔记(六)》,笔者JustryDeng

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值