1. 程式人生 > >IoC容器初始化之——WebApplicationContext

IoC容器初始化之——WebApplicationContext

此文章為自己看《Spring4.x企業應用開發實戰》一書,總結的筆記,有錯誤請大家諒解並指點,謝謝大家~~ WebApplicationContext是什麼? WebApplicationContext是專門從web根目錄的路徑中載入配置檔案進行初始化。 在WebApplicationContext中獲取ServletContext的引用,將web上下文物件放入ServletContext中,這樣web應用就可以訪問Spring應用上下文。 WebApplicationContext的實現方式是什麼? Spring給WebApplicationContext提供了一個工具類WebApplicationContextUtils的getWebApplicationContext(ServletContext sc)的方法,從ServletContext中獲取WebApplicationContext例項。 getWebApplicationContext(ServletContext sc)方法的內部實現程式碼: WebApplicationContext wac = (WebApplicationContext)servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); WebApplicationContext與BeanFactory和Applicationcontext有什麼不同。
WebApplicationContext初始化不同於BeanFactory和ApplicationContext,因為WebApplicationContext需要ServletContext例項,它必須要有web容器才能啟動工作。 現在web開發都是需要在web.xml中配置web容器監聽器(也就是ServletContextListener)或者自定義Servlet。
Spring為WebApplicationContext分別準備了對應的Servlet和web容器監聽器: org.springframework.web.context.ContextLoadServlet。 org.springframework.web.context.ContextLoadListener。 二者內部都實現了WebApplicationContext載入例項的邏輯,只要在web.xml中配置就可以。
使用ContextLoaderListener啟動WebApplicationContext的web.xml配置
... <!--指定配置檔案--> <context-param> <param-name>contextConfigLocation</param-name> <param-value> <!--如果有多個用“,”隔開--> /WEB-INF/XXXX.xml </param-value> </context-param> <listerner> <lister-class>org.springframework.web.context.ContextLoaderListener</lister-class> </listerner> ... ContextLoaderListener通過web容器上下文contextConfigLocation獲取Spring配置檔案位置。
使用ContextLoaderServlet啟動WebApplicationContext的web.xml配置
... <!--指定配置檔案--> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/XXXX.xml <param-value> </context-param>
<!--宣告servlet--> <servlet> <servlet-name>springContextLoaderServlet</servlet-name> <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class> <!--啟動順序--> <load-on-startup>1</load-on-startup> </servlet> ...