Spring InitializingBean 介面以及Aware介面實現的原理
關於Spring InitializingBean 介面以及Aware介面實現的其實都在
第11步中;
finishBeanFactoryInitialization() 方法中完成了3部分的內容:
1.完成對單例的非懶載入的bean 進行初始化
2.對於InitializingBean 介面 spring 會自動呼叫它的 afterPropertiesSet方法;
3.還進行了對實現了Aware 介面實現的呼叫
多說無益,我們來看一看,它是怎麼完成初始化,以及介面的呼叫;
a: 第一步肯定是我們的入口refresh()方法:我們進入 finishBeanFactoryInitialization()中
b: 我們進入例項化的方法中: beanFactory.preInstantiateSingletons();
c : 就是建立bean 的方法:我們點進去瞧瞧
d :經過doGetBean (),我們需要去看createBean()實現
e :關鍵的步驟來了,所有的方法都在createBean()中實現,實現類是AbstractAutoWrieCapableBeanFactory() 中,有很多有用的方法;
f:繼續呼叫doCreateBean();
g: 對bean 的例項化。具體你們可以去往下點,通過反射例項化物件
h :在初始化成功後,就開始檢測這個bean 是否實現了InitializingBean 以及Aware介面;就是這個initializeBen()
我們點進去看看。主要兩個方法:
(1),invokeAwareMethods():呼叫實現了Aware 介面的方法;
(2), invokeInitMethod(): 呼叫實現InitializingBean 的方法:
我們看一看Aware 介面的呼叫實現:
InitializingBean 介面呼叫實現:會呼叫afterPropertiesSet()方法:
哈哈,在Springmvc中RequestHandlerMapping() 的URL註冊就是這麼實現的
從這個順序也可以看粗:Aware 先執行後是InitializingBean
好了,有沒有了解呢?