springMVC 源碼解讀系列(一)初始化


先看看DispatcherServlet的類機構:

始化時序圖

 

servlet初始化會調用 init 方法,換句話說就是springMVC進行初始化的時候首先會去執行HttpServletBean的init方法, 下面看看HttpServletBean的源碼:

上面這段代碼主要是在獲取你在web.xml中配置在<init-param>中的屬性(例如: namespace, contextConfigLocation)。 其中有一點值得注意,那就是 initServletBean() 這個方法是由其子類 FrameworkServlet 實現,因此, 接下來 FramworkServlet 會執行 initServletBean 這個方法,下面就繼續看看 initServletBean 方法源碼:

可以看到 initServletBean 方法中就調用了一個 initFrameworkServlet 方法和 initWebApplicationContext 方法,其中initFrameworkServlet方法是由子類實現,這個不多說,直接看 initWebApplicationContext 方法源碼:

代碼注釋部分已給出解析, 此處不再分析, 上面代碼調用了一次 createWebApplicationContext 方法, 下面就看看這個方法的源碼:

以上就是創建webApplicationContext的代碼,注釋已給出。

還記得FrameworkServlet初始化的時候會調用onRefresh()方法嗎,這個方法是留給其子類DispatcherServlet調用的, 最后就該看看DispatcherServlet里面的 onRefresh 方法了:

可以看到onRefresh方法就一句話,調用initStrategies方法, 上面給出了 initStrategies 源碼, 很直觀,就是在初始化springMVC 的一系列組件, 但是此處你要明白 ,SpringMVC的組件其實已經在webApplicationContext創建時就已經實例化了, 此處所謂的初始化只是在選擇合適的組件(每一個組件都對應了幾個不同的實現)。
 
OK, 至此, springMVC 的初始化完成!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM