javascript
【Spring注解系列10】SpringBean的生命周期
1.SpringBean生命周期定義
指bean創建---初始化----銷毀的過程。
構造(對象創建):
- 單實例:在容器啟動的時候創建對象
- 多實例:在每次獲取的時候創建對象
初始化和銷毀方式:
-
指定初始化和銷毀方法;容器在bean進行到當前生命周期的時候來調用我們自定義的初始化和銷毀方法。
? ? ? ? ? ? @Bean中指定的 initMethod 和?destroyMethod
-
bean后置處理器BeanPostProcessor實現初始化:在bean初始化前后進行一些處理工作
? ? ? ? ? ? ?BeanPostProcessor.postProcessBeforeInitialization?初始化
? ? ? ? ? ? ? ? ? ?對象創建完成,并賦值好,調用初始化方法。。。
? ? ? ? ? ? ?BeanPostProcessor.postProcessAfterInitialization? 銷毀
? ? ? ? ? ? ? ? ? ? 單實例:容器關閉的時候
? ? ? ? ? ? ? ? ? ? 多實例:容器不會管理這個bean;容器不會調用銷毀方法;
- 通過讓Bean實現InitializingBean 定義初始化邏輯,DisposableBean定義銷毀邏輯;
- 使用JSR250注解@PostConstruct 和 @PreDestroy
? ? ? ? ? ? ?@PostConstruct:在bean創建完成并且屬性賦值完成;來執行初始化方法
? ? ? ? ? ? ?@PreDestroy:在容器銷毀bean之前通知我們進行清理工作
2.生命周期中執行順序
生命周期流程:
執行構造方法--->bean后置處理器--->@PostConstruct--->InitializingBean--->@Bea指定的初始化方法--->bean后置處理器
--->容器準備關閉(或者移除實例)--->?@PreDestroy--->DisposableBean--->@Bean指定的銷毀方法--->容器關閉
?
3.實例
//對象實例類 public class BeanLife implements InitializingBean,DisposableBean{public BeanLife() {System.out.println("構造方法: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 ..... 初始化結束");System.out.println("applicationContext ..... 準備關閉");applicationContext.close();System.out.println("applicationContext ..... 已關閉");} }//測試結果: 構造方法:BeanLife--->construct... bean后置處理器:MyBeanPostProcessor......postProcessBeforeInitialization @PostConstruct注解:BeanLife--->@PostConstruct.PostConstruct InitializingBean接口:BeanLife--->InitializingBean.afterPropertiesSet @Bean指定初始化方法:BeanLife--->selfInit bean后置處理器:MyBeanPostProcessor......postProcessAfterInitialization applicationContext ..... 初始化結束 applicationContext ..... 準備關閉 @PreDestroy注解:BeanLife--->@PreDestroy.PreDestroy DisposableBean接口:BeanLife--->DisposableBean.destroy @Bean指定初銷毀方法:BeanLife--->selfDestroy applicationContext ..... 已關閉?
總結
以上是生活随笔為你收集整理的【Spring注解系列10】SpringBean的生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Spring注解系列09】Spring
- 下一篇: 【Spring注解系列11】Spring