type
status
date
slug
summary
tags
category
icon
password
ext
order
comment
首先放一张图,便于理解之后的内容
initMethod与destroyMethod
在最前面提到过,@Bean注解中有两个参数,分别是initMethod(初始化)、destroyMethod(销毁),我们先看一下这两个参数在IOC整个流程中的执行顺序。
由此我们可以知道顺序为
- 创建时:执行这个类的构造函数->执行init方法->IOC容器创建完成
- 关闭时:执行destory方法->IOC容器关闭
注意:以上是单例模式,也就是@scope的默认值singleton,当我们设置为prototype多实例时,只有在获取时才会执行init,而且是不执行destroy方法的
InitializingBean与DisposableBean
实现InitializingBean,DisposableBean接口并重写其中afterPropertiesSet,destroy方法,我们可以先看一下这两个接口的代码
可以看到,这两个接口中都只有一个方法,分别对应初始化对象结束和销毁,接下来还是在我们的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方法,可以看下这个输出结果,显示了上面一共四种的生命周期的加载顺序
- 作者:Loneking
- 链接:https://loneking.cn/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/93
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。