Spring生命週期管理之總結

池塘里洗澡的鸭子發表於2024-03-15

  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初始化之前。

相關文章