Spring 高階特性之二:後置處理器PostProcessor深入理解

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

  在Spring生命週期管理之總結中測試案例的基礎上再增加點私貨,研究下Spring中的PostProcessor。儘管在Spring 高階特性之二:處理器Processor中已得出相關結論,研究的都是已有框架的操作,此處可以透過新增自定義postProcessor對後置處理與生命週期之間的關係進行更深入的理解。

  增加自定義的BeanFactoryPostProcessor和BeanPostProcessor:

          

          

  測試結果如下:

          

  從上圖測試結果可以得出以下結論:

    1)執行順序:第一,BeanFactoryPostProcessor;

          第二,注入屬性;

          第三,實現Aware介面的類;

          第四,BeanPostProcessor的初始化前操作;

          第五,除LifeCycle外的初始化;

          第六,BeanPostProcessor的初始化後操作;

          第七,所有bean的第六步完成後,LifeCycle的初始化;

          第八,銷燬動作的執行(順序同Spring生命週期管理之總結中的結論)。

      此過程中初始化被BeanPostProcessor的初始化後操作postProcessAfterInitialization分割成了兩部分。

    2)測試資料的變化:原始的Person.phone的值是1xx270xx099,工廠方法將此屬性設定為110,注入屬性的時候原始值就被捨棄了;屬性注入後BeanPostProcessor又將此屬性值設定為120,最終該屬性的值是120,而不是原始值了。

  

相關文章