1. 程式人生 > >Spring InitializingBean 介面以及Aware介面實現的原理

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

好了,有沒有了解呢?