先看看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 方法了:
新聞熱點
疑難解答