天天看点

ContextLoaderListener在Spring中的作用

作用:在启动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说明:

  1. ContextLoader可以由 ContextLoaderListener和ContextLoaderServlet生成。查看ContextLoaderServlet的API,可以看到它也关联了ContextLoader这个类而且它继承了HttpServlet类.
  2. ContextLoader创建的是 XmlWebApplicationContext这样一个类,它实现的接口是WebApplicationContext->ConfigurableWebApplicationContext->ApplicationContext->

    BeanFactory这样一来spring中的所有bean都由这个类来创建.

  3. 部署applicationContext.xml文件,如果在web.xml中不写任何参数配置信息,默认的路径是”/WEB-INF/applicationContext.xml,在

    WEB-INF

    目录下创建的

    xml

    文件的名称必须是

    applicationContext.xml

    。如果是要自定义文件名可以在web.xml里加入*contextConfigLocation这个context参数:
<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>
           

参考