Spring笔记-Bean的生命周期
技术分享|2020-2-4|最后更新: 2023-9-4
type
status
date
slug
summary
tags
category
icon
password
order
首先放一张图,便于理解之后的内容
notion image

initMethod与destroyMethod

在最前面提到过,@Bean注解中有两个参数,分别是initMethod(初始化)、destroyMethod(销毁),我们先看一下这两个参数在IOC整个流程中的执行顺序。
由此我们可以知道顺序为
  • 创建时:执行这个类的构造函数->执行init方法->IOC容器创建完成
  • 关闭时:执行destory方法->IOC容器关闭
注意:以上是单例模式,也就是@scope的默认值singleton,当我们设置为prototype多实例时,只有在获取时才会执行init,而且是不执行destroy方法的

InitializingBean与DisposableBean

实现InitializingBeanDisposableBean接口并重写其中afterPropertiesSetdestroy方法,我们可以先看一下这两个接口的代码
可以看到,这两个接口中都只有一个方法,分别对应初始化对象结束销毁,接下来还是在我们的Person类里写,注意,我们第一种方法通过@Bean注解的参数init以及destory也保留在其中,方便我们看不同方式,执行顺序的不同
注意:以上是单例模式,也就是@scope的默认值singleton,当我们设置为prototype多实例时,只有在获取时才会执行init及afterPropertiesSet,而且是不执行destroy方法的

@PostConstruct与@PreDestroy

  • @PostConstruct:在bean创建完成,且属性赋值完成后进行初始化, 该方法不得有任何参数
  • @PreDestroy:在bean将被移除之前进行通知,在容器销毁之前进行清理工作,该方法不得有任何参数
包括第一种方式,这些初始化以及销毁的方法,都不得有任何参数
注意:和前两种方式一样,单例才会执行destroy相关的方法,多实例是不执行的

BeanPostProcessor

首先放下BeanPostProcessor接口的源代码,可以看到其中只有两个方法,注释解释的很清楚
  • postProcessBeforeInitialization bean的各种初始化方法调用前调用
  • postProcessAfterInitialization bean的各种初始化方法调用后调用
接下来我们将这个接口实现一下,记得用@Component注解并且要让ComponentScan扫描到
然后和之前一样,执行Main方法,可以看下这个输出结果,显示了上面一共四种的生命周期的加载顺序
 
Spring笔记-自动装配注解Spring笔记-Bean基础及使用