【转】web.xml中的contextConfigLocation在spring中的做用

1、spring中如何使用多个xml配置文件web

  一、在web.xml中定义contextConfigLocation参数,Spring会使用这个参数去加载全部逗号分隔的xml文件,若是没有这个参数,spring会默认加载WEB-INF/applicationContext.xml文件(若没有,要新建一个)。spring

  例如:app

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:conf/spring/applicationContext_core*.xml,
        classpath*:conf/spring/applicationContext_dict*.xml,
        classpath*:conf/spring/applicationContext_hibernate.xml,
    </param-value>
</context-param>

  contextConfigLocation参数的<param-value>定义了要加载的Spring配置文件。spa

  PS:classpath指编译后的class路径。包含 WEB-INF/lib下的全部jar包和WEB-INF/classes目录hibernate

  原理:利用ServletContextListener实现code

  Spring提供ServletContextListener的一个实现类ContextLoaderListener,该类能够做为listener使用,它会在建立时自动查找WEB-INF/下的applicationContext.xml文件。所以,若是只有一个配置文件,而且文件名为applicationContext.xml,则只须要在web.xml文件中增长以下代码便可:xml

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

  若是有多个配置文件载入,则考虑使用<context-param>元素来肯定配置文件的文件名。因为ContextLoaderListener加载时,会查找名为contextConfigLocation的参数(注意:这是底层代码写死的名称),所以,配置<context-param>时参数名字应该是contextConfigLocation。blog

  带多个配置文件的web.xml文件以下:字符串

<web-app>
  <!--肯定多个配置文件-->
  <context-param>
    <!-- 参数名为contextConfigLocation…-->
    <param-name>contextConfigLocation</param-name>
    <!--多个配置文件之间以,隔开-->
    <param-value>/WEB-工NF/daoContext.xml./WEB-INF/applicationContext.xml</param-value>
  </context-param>
  <!-- 采用listener建立ApplicationContext 实例-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
</web-app>

  若是没有contextConfigLocation参数指定配置文件,则Spring自动查找applicationContext.xml配置文件。若是有contextConfigLocation,则利用该参数肯定配置文件。改参数的值指定一个字符串,Spring的ContextLoaderListener负责将该字符串分解成多个配置文件,逗号、空格及分号均可以做为字符串的分割符。若是既没有applicationContext.xml文件,也没有使用contextConfigLocation参数肯定配置文件,或者contextConfigLocation肯定的配置文件不存在,都将致使Spring没法加载配置文件,从而没法正常建立ApplicationContext实例。io

2、使用通配符

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

  好比说用到Hibernate,则把hibernate相关的配置放在applicationContext-hibernate.xml这一个文件,而一些全局相关的信息则放在applicationContext.xml中,其它的配置文件相似,这样就没必要用空格或逗号分开多个配置文件了。

相关文章
相关标签/搜索