WebApplicationContext是專門爲web應用準備的,他容許從相對於web根目錄的路勁中裝載配置文件完成初始化工做,從WebApplicationContext中能夠得到ServletContext的引用,整個Web應用上下文對象將做爲屬性放置在ServletContext中,以便web應用能夠訪問spring上下文,spring中提供WebApplicationContextUtils的getWebApplicationContext(ServletContext src)方法來得到WebApplicationContext對象java
WebApplicationContext擴展了ApplicationContext.在 WebApplicationContext中定義了一個常量 ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,在上下文啓動時,web
WebApplicationContext以此爲鍵放置在ServletContext屬性列表中,spring
public static WebApplicationContext getWebApplicationContext(ServletContext sc) { return getWebApplicationContext(sc, WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); }
ConfigurableWebApplicationContext擴展了WebApplicationContext,它容許經過配置的方式實例化,同時設置兩個重要方法spa
setServletContext(ServletContext context) 爲spring設置web應用上下文,以便二者整合3d
setConfigLocations(String[]locations) 設置Spring配置的文件地址code
webApplicationContext初始化須要ServletContext,也就是說須要web容器前提下才能·完成啓動工做 能夠經過在web.xml中配置自啓動Servlet或Web容器監聽來實現web容器的啓動xml
Spring分別提供啓動WebApplicationContext的servlet和Web容器監聽器對象
org.springframework.web.context.ContextLoaderListener blog
org.springframework.web.context.ContexLoaderServlet 此方法目前以廢棄get
!--從類路徑下加載Spring配置文件,classpath特指類路徑下加載--> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:smart-context.xml </param-value> </context-param> <!--負責啓動spring容器的監聽器 還能夠聲明自啓動的Servlet ContextLoaderServlet--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
若是使用@Configuration的java類提供配置信息的配置 web.xml配置修改以下
<!--經過指定context參數,讓Spring使用AnnotationConfigWebApplicationContext啓動容器而非XmlWebApplicationContext 默認沒配置時是使用XmlWebApplicationContext--> <context-param> <param-name>contextClass</param-name> <param-value> org.springframework.web.context.support.AnnotationConfigWebApplicationContext </param-value> </context-param> <!--指定標註了@Configuration的類,多個能夠用逗號分隔--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>com.example.Car,com.example.Boss</param-value> </context-param> <!--監聽器將根據上面的配置使用AnnotationConfigWebApplicationContext 根據contextConfigLocation 指定的配置類啓動Spring容器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>