spring初始化過程:
入口點是
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
在這個監聽器中創建容器 放到ServletContext中,key是ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE = 類的全限定名.ROOT
創建容器過程:先在web.xml中看看有沒有指定的自定義容器類,有的話通過反射Class.forname創建 沒有就使用默認的容器類WebXmlApplicationContext
springMVC初始化過程:
DispatcherServlet中用了很多模版設計模式 springMVC使用策略模式完成許多功能
首先從ServletContext中獲取到由ContextLoaderListener初始化完成並放進入的根容器對象引用 需要獲取父容器即spring容器 最後也是創建XmlWebApplicationContext容器
策略模式相關:
initMultipartResolver用來處理文件上傳
initLocaleResolver用來處理國際化
initHandlerAdapters處理映射
initHandlerExceptionResolvers處理異常
initRequestToViewNameTranslator處理請求到視圖名的一個轉化
initViewResolvers處理視圖
大體來說:
DispatcherServlet繼承了 httpservletBean 和 frameWorkServlet
httpservletBean創建配置或資源文件 --》frameWorkServlet創建spring容器和springMVC容器的關聯 --》在DispatcherServlet中才進行具體功能的初始化工作