Spring生命週期管理之SmartLifecycle,LifecycleProcesso介面詳述中使用demo、程式碼跟蹤除錯的方式深入理解了Spring生命週期管理的一種方式。當然Spring提供了不止這一種方式的生命週期的管理,比如Spring配置之常用配置概述中就有關於bean生命週期init和destroy配置說明。
那麼Spring提供了多少中生命週期管理的方式,以及這些方式使用的業務場景又是什麼?
第一種方式:實現InitializingBean, DisposableBean介面
測試:
測試結果:
跟蹤除錯,init觸發點如下:
destroy觸發點如下:
第二種方式:Java配置方式使用@Bean的initMethod和destroyMethod
Person內容新增自定義的初始化和銷燬方法:
配置類MyConfig中新增@Bean:
第三種方式:JSR提供的@PostConstruct和@PreDestroy註解
新增JSR依賴:
Person中新增JSR初始化和銷燬方法:
以上三種方式同時測試:
透過測試結果可以得出以下結論:
1)屬性注入在初始化之前;
2)三種方式初始化的順序是:JSR提供的@PostConstruct
實現InitializingBean介面
JavaBean方式配置的自定義初始化方法
銷燬順序與初始化順序一致。
如果將Spring生命週期管理之SmartLifecycle,LifecycleProcesso介面詳述中涉及到的第四種方式SmartLifecycle也新增進去,執行順序是怎樣的呢?測試看看:
從測試結果觀察,可以發現Lifecycle最後執行初始化,卻最先執行銷燬動作。
以上生命週期的案例還夾帶了點私貨:Person類實現的兩個Aware介面,從測試結果看Aware的執行在屬性注入之後bean初始化之前。