作用:在启动Web容器时,自动装配Spring applicationContext.xml的配置信息。
1. ContextLoaderListener类
首先看看这个类在spring中的位置:
org.springframework.web.context.ContextLoaderListener
package org.springframework.web.context;
public class ContextLoaderListener extends Object implements ServletContextListener {
...
}
因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。
接下来我们看看ContextLoader的API说明:
- ContextLoader可以由 ContextLoaderListener和ContextLoaderServlet生成。查看ContextLoaderServlet的API,可以看到它也关联了ContextLoader这个类而且它继承了HttpServlet类.
-
ContextLoader创建的是 XmlWebApplicationContext这样一个类,它实现的接口是WebApplicationContext->ConfigurableWebApplicationContext->ApplicationContext->
BeanFactory这样一来spring中的所有bean都由这个类来创建.
- 部署applicationContext.xml文件,如果在web.xml中不写任何参数配置信息,默认的路径是”/WEB-INF/applicationContext.xml,在
目录下创建的WEB-INF
文件的名称必须是xml
。如果是要自定义文件名可以在web.xml里加入*contextConfigLocation这个context参数:applicationContext.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext.xml</param-value>
</context-param>
在
<param-value> </param-value>
里指定相应的xml文件名,如果有多个xml文件,可以写在一起并一“,”号分隔。如:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:eventContext.xml, classpath*:applicationContext.xml, classpath*:daoContext.xml, classpath*:serviceContext.xml, classpath*:resourceContext.xml, classpath:*Context.xml
</param-value>
</context-param>
2. ContextLoaderListener类的使用
在web.xml加入:
<listener>
<display-name>contextLoaderListener</display-name>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
如果applicationContext.xml文件没有在/WEB-INF/下,或文件名不一致,或存在多个Spring配置文件,在web.xml文件中根据下面代码修改:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:eventContext.xml, classpath*:applicationContext.xml, classpath*:daoContext.xml, classpath*:serviceContext.xml, classpath*:resourceContext.xml, classpath:*Context.xml
</param-value>
</context-param>
参考