在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,而不是原始值了。