spring拓展執行時機

這是一個被人講爛了的東西,但是我還是會更全面地介紹,並且提出一些坑

一、整體流程

①BeanFactoryPostProcessor(這個嚴格來說不是bean生命週期,只是他會在容器初始化完會調用,這裏提及,主要爲了說明集中後置處理器順序)

②bean實例化(調用構造方法進行實例化,放進三級緩存)

③依賴注入

④調用各類aware接口(aware接口作用:就是讓實現接口的類可以獲取容器裏的信息,如beanname等)

⑤BeanPostProcessor(before方法)

⑥@PostConstruct標註的方法

⑦InitializingBean

⑧BeanPostProcessor(after方法)

⑨運行

⑩銷燬

二、例子(會舉2個例子)

例子1:

備註:在before和after方法都叫了if判斷是因爲實現了beanpostprocessor接口,會對所有類生效,加if是爲了只打印當前類。

OK,結果會不會是我們上面分析的呢?

①BeanPostProcessor不會加載當前的類,所以if一直都判斷失敗,導致before、after都不打印

②BeanFactoryPostProcessor順序會在aware接口之後

③@PostConstruct沒執行

 

例子2:

把BeanPostProcessor、BeanFactoryPostProcessor寫到另一個類,而不能跟業務類寫在一起

結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章