這是一個被人講爛了的東西,但是我還是會更全面地介紹,並且提出一些坑
一、整體流程
①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寫到另一個類,而不能跟業務類寫在一起
結果: