|||
最近在系统学习 Spring 相关的一些知识点,仅此作为学习心得笔记
1
从上面的结果,我们可以得出以下结论,在Spring
框架中单实例Bean
的初始化和销毁过程有这样的执行顺序:
初始化顺序:@PostConstruct → InitializingBean → init-method
销毁顺序:@PreDestroy → DisposableBean → destroy-method
在初始化Bean
时,@PostConstruct
注解方法会首先被执行,然后是实现InitializingBean
接口的afterPropertiesSet
方法,最后是init-method
指定的方法。
在销毁Bean
时,@PreDestroy
注解方法会首先被执行,然后是实现DisposableBean
接口的destroy
方法,最后是destroy-method
指定的方法
结合前面说过的属性赋值(构造器方法和setter
方法),简单总结一下Spring Bean
生命周期的流程:
实例化(通过构造器方法);
设置Bean
的属性(通过setter
方法);
调用Bean
的初始化方法(@PostConstruct
、afterPropertiesSet
方法或者init-method
指定的方法);
Bean
可以被应用程序使用;
当容器关闭时,调用Bean
的销毁方法(@PreDestroy
、destroy
方法或者destroy-method
指定的方法)。
将原型Bean
和单例Bean
的三种生命周期进行对比后发现,调用IOC
容器的destroyBean()
方法销毁原型Bean
时,只有@PreDestroy
注解和DisposableBean
接口的destroy
方法会被触发,而被destroy-method
标记的自定义销毁方法并不会被执行。
从这里我们可以得出结论:在销毁原型Bean
时,Spring
不会执行由destroy-method
标记的自定义销毁方法,所以原型Bean
的destroy-method
的也有局限性。如果有重要的清理逻辑需要在Bean
销毁时执行,那么应该将这部分逻辑放在@PreDestroy
注解的方法或DisposableBean
接口的destroy
方法中。
如有侵权,请通知我,我会立即删除
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-22 08:52
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社