在Servlet容器生命周期内,容器首先初始化
ServletContextListener,然后初始化
Filter和
Servlet实例。
Spring Web应用程序通常加载两个上下文:根上下文和调度程序servlet上下文。的ContextLoaderListener类是
ServletContextListener它加载应用程序(或根)上下文。它通过
context-param使用
contextConfigLocation像下面的
web.xml中给出的名称标识要加载的文件
<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/mvc-dispatcher-servlet.xml </param-value></context-param>
或者,默认情况下,通过在上查找文件
/WEB-INF/applicationContext.xml。由于你已指定
/WEB-INF/mvc-dispatcher-servlet.xml为
contextConfigLocation,因此将加载该上下文。
完成此操作后,容器将初始化
DispatcherServlet,同时还会加载上下文。它通过具有以下
web.xml中给定
init-param名称的元素来标识文件加载
contextConfigLocation
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/some-random-location.xml</param-value> </init-param></servlet>
或者,默认情况下,通过在上查找文件
/WEB-INF/name-of-your-servlet-servlet.xml。换句话说,它获取
<servlet-name>元素的值并将
-servlet.xml其追加并在中查找WEB-INF。
由于你未指定
init-paramwith的名称
contextConfigLocation,因此
DispatcherServlet将上下文文件加载到
/WEB-INF/mvc-dispatcher-servlet.xml,因为其名称为
mvc-dispatcher。由加载的上下文
DispatcherServlet可以访问由加载的
Bean ContextLoaderListener,因此我们将其称为根上下文(以及其他子代)。
所有这一切都说明你
ContextLoaderListener和你
DispatcherServlet正在
ApplicationContext通过分别
XmlWebApplicationContext从加载相同文件来创建自己的副本
/WEB-INF/mvc-dispatcher-servlet.xml。
确定你认为整个应用程序可以使用哪些bean或配置,并将它们放在将由加载的文件中
ContextLoaderListener。确定你认为应该可用的bean或配置
DispatcherServlet,并将其放入其上下文文件中。



