javascript
【Spring注解系列10】SpringBean的生命周期
1.SpringBean生命周期定義
指bean創(chuàng)建---初始化----銷毀的過程。
構(gòu)造(對象創(chuàng)建):
- 單實(shí)例:在容器啟動的時(shí)候創(chuàng)建對象
- 多實(shí)例:在每次獲取的時(shí)候創(chuàng)建對象
初始化和銷毀方式:
-
指定初始化和銷毀方法;容器在bean進(jìn)行到當(dāng)前生命周期的時(shí)候來調(diào)用我們自定義的初始化和銷毀方法。
? ? ? ? ? ? @Bean中指定的 initMethod 和?destroyMethod
-
bean后置處理器BeanPostProcessor實(shí)現(xiàn)初始化:在bean初始化前后進(jìn)行一些處理工作
? ? ? ? ? ? ?BeanPostProcessor.postProcessBeforeInitialization?初始化
? ? ? ? ? ? ? ? ? ?對象創(chuàng)建完成,并賦值好,調(diào)用初始化方法。。。
? ? ? ? ? ? ?BeanPostProcessor.postProcessAfterInitialization? 銷毀
? ? ? ? ? ? ? ? ? ? 單實(shí)例:容器關(guān)閉的時(shí)候
? ? ? ? ? ? ? ? ? ? 多實(shí)例:容器不會管理這個(gè)bean;容器不會調(diào)用銷毀方法;
- 通過讓Bean實(shí)現(xiàn)InitializingBean 定義初始化邏輯,DisposableBean定義銷毀邏輯;
- 使用JSR250注解@PostConstruct 和 @PreDestroy
? ? ? ? ? ? ?@PostConstruct:在bean創(chuàng)建完成并且屬性賦值完成;來執(zhí)行初始化方法
? ? ? ? ? ? ?@PreDestroy:在容器銷毀bean之前通知我們進(jìn)行清理工作
2.生命周期中執(zhí)行順序
生命周期流程:
執(zhí)行構(gòu)造方法--->bean后置處理器--->@PostConstruct--->InitializingBean--->@Bea指定的初始化方法--->bean后置處理器
--->容器準(zhǔn)備關(guān)閉(或者移除實(shí)例)--->?@PreDestroy--->DisposableBean--->@Bean指定的銷毀方法--->容器關(guān)閉
?
3.實(shí)例
//對象實(shí)例類 public class BeanLife implements InitializingBean,DisposableBean{public BeanLife() {System.out.println("構(gòu)造方法:BeanLife--->construct...");}public void selfInit(){System.out.println("@Bean指定初始化方法:BeanLife--->selfInit");}public void selfDestroy(){System.out.println("@Bean指定初銷毀方法:BeanLife--->selfDestroy");}@PostConstructpublic void postConstruct(){System.out.println("@PostConstruct注解:BeanLife--->@PostConstruct.PostConstruct");}@PreDestroypublic void preDestroy(){System.out.println("@PreDestroy注解:BeanLife--->@PreDestroy.PreDestroy");}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("InitializingBean接口:BeanLife--->InitializingBean.afterPropertiesSet");}@Overridepublic void destroy() throws Exception {System.out.println("DisposableBean接口:BeanLife--->DisposableBean.destroy");} }//后置處理器 public class MyBeanPostProcessor implements BeanPostProcessor {@Nullable@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println("bean后置處理器:MyBeanPostProcessor......postProcessBeforeInitialization");return bean;}@Nullable@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println("bean后置處理器:MyBeanPostProcessor......postProcessAfterInitialization");return bean;} }//配置類@Configuration public class BeanLifeCycleConfig {@Bean(value = "beanLife", initMethod = "selfInit", destroyMethod = "selfDestroy")public BeanLife life() {return new BeanLife();}@Beanpublic MyBeanPostProcessor myBeanPostProcessor(){return new MyBeanPostProcessor();} }//測試類public class BeanLifeCycleTest {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanLifeCycleConfig.class);System.out.println("applicationContext ..... 初始化結(jié)束");System.out.println("applicationContext ..... 準(zhǔn)備關(guān)閉");applicationContext.close();System.out.println("applicationContext ..... 已關(guān)閉");} }//測試結(jié)果: 構(gòu)造方法:BeanLife--->construct... bean后置處理器:MyBeanPostProcessor......postProcessBeforeInitialization @PostConstruct注解:BeanLife--->@PostConstruct.PostConstruct InitializingBean接口:BeanLife--->InitializingBean.afterPropertiesSet @Bean指定初始化方法:BeanLife--->selfInit bean后置處理器:MyBeanPostProcessor......postProcessAfterInitialization applicationContext ..... 初始化結(jié)束 applicationContext ..... 準(zhǔn)備關(guān)閉 @PreDestroy注解:BeanLife--->@PreDestroy.PreDestroy DisposableBean接口:BeanLife--->DisposableBean.destroy @Bean指定初銷毀方法:BeanLife--->selfDestroy applicationContext ..... 已關(guān)閉?
總結(jié)
以上是生活随笔為你收集整理的【Spring注解系列10】SpringBean的生命周期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Spring注解系列09】Spring
- 下一篇: 【Spring注解系列11】Spring