加載XML文件——創建IOC容器時序圖
源碼理解
首先需要找到入口。IOC容器初始化運行的入口。
回顧
什麼是SpringIOC
IOC(Inversion Of Control)控制反轉,所謂控制反轉,就是把我們代碼中需要實現的對象的創建、依賴。反轉給容器來實現。同時需要一種描述讓容器知道需要創建的對象和對象之間的關係。即配置文件。
尋找源碼入口
1.關於BeanFactory
BeanFactory:頂層接口類,定義了IOC容器的基本規範。
三個重要子類:ListableBeanFactory、HierarchicalBeanFactory 和 AutowireCapableBeanFactory
最終的默認實現類:DefaultListableBeanFactory
Spring內部在操作過程中對象的傳遞和轉化過程中,有這各自的職能。如ListableBeanFactory接口,表示可初始化列表Bean
根據時序圖來解析
如何找到入口
通過對Spring的使用以及初步的認識,我們知道Spring的初始化是從DispatcherServlet開始的,我們可以發現Spring中有許多init開頭的方法,顧名思義,這些方法就是爲Spring初始化做準備的。通過其繼承關係,我們可以在其父類中找到最初的init()方法。
我們在HttpServletBean中可以發現有一個名爲initServletBean()的方法。
注意圈紅的代碼,結合我們在項目中使用Spring的時候控制檯打出的日誌。
沒有任何問題,我們找到入口了。(持續更新中,,,)
---------------------------------------------------2019-06-05---------------------------------------------------------------------------------------
入口已經找到,接下來慢慢抽絲剝繭揭開神祕的IOC容器的“面紗”
在initservletBean方法中,我們可以發現調用了initWebApplicationContext方法,我們來看這個方法
有一個方法叫作configureAndRefreshWebApplicationContext
在此方法中調用了refresh()方法,我們可以簡單理解爲,在Spring啓動過程中會調用refresh方法。這個時候讓我們在這個方法上多加點注意力。
IOC容器初始化的流程
容器啓動的過程大概可以概括爲三個步驟定位、加載和註冊。即定位我們的配置文件,加載配置文件和根據配置文件進行註冊
以ApplicationContext爲例,我們可以在main中啓動對xml文件的加載。以此來幫助我們去認識IOC容器。
通過對其構造方法的跟蹤,我們發現調用了refresh()方法,也就是我們時序圖的起點。通過setConfigLocations方法我們也可以發現,配置文件通過字符串數組的形式進行傳遞。這裏可以作爲我們學習IOC容器的起點,即,定位配置文件。
根據時序圖我們可以一步一步去學習認識IOC容器的初始化過程。
2019-06-08:更爲詳細的IOC運行時序圖