• (转)web.xml中的contextConfigLocation在spring中的作用


    一、Spring如何使用多个xml配置文件

      1、在web.xml中定义contextConfigLocation参数,Spring会使用这个参数去加载所有逗号分隔的xml文件,如果没有这个参数,Spring默认加载web-inf/applicationContext.xml文件。

      例如:

    复制代码
    <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 配置文件。

    原理:利用ServletContextListener 实现

      Spring 提供ServletContextListener 的一个实现类ContextLoaderListener ,该类可以作为listener 使用,它会在创建时自动查找WEB-INF/ 下的applicationContext.xrnl 文件。因此,如果只有一个配置文件,并且文件名为applicationContext.xml ,则只需在web.xml文件中增加如下代码即可:

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

      如果有多个配置文件需要载入,则考虑使用<context-param>元素来确定配置文件的文件名。由于ContextLoaderListener加载时,会查找名为contextConfigLocation的参数。因此,配置<context-param>时参数名字应该是contextConfigLocation。

      带多个配置文件的web.xml 文件如下:

    复制代码
    <1-- XML 文件的文件头二〉
    <web-app>
      <!一确定多个配置文件>
      <context-param>
        <1-- 参数名为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 实例

    配置一个spring为加载而设置的servlet可以达到同样效果.

      采用load-on-startup Servlet 实现。
      Spring 提供了一个特殊的Servllet 类: ContextLoaderServlet。该Servlet 在启动时,会自动查找WEB-IN日下的applicationContext. xml 文件。当然,为了让ContextLoaderServlet 随应用启动而启动,应将此Servlet 配置成load-on-startup 的Servleto load-on-startup 的值小一点比较合适,因为要保证ApplicationContext 优先创建。如果只有一个配置文件,并且文件名为applicationContext. xml ,则在web.xml 文件中增加如下代码即可:

    <servlet>
         <servlet-name>context</servlet-arne>
        <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
         <load-on-startup>l</load-o 口-startup>
    </servlet>

      带多个配置文件的web.xml 文件如下:

    复制代码
    <web-app>
      <'一确定多个配置文件一>
      <context-param>
        <!-- 参数名为contextConfigLocation-->
        <param-name>contextConfigLocation</param-name>
        <!-- 多个配置文件之间以,隔开一〉
        <param-value>/WEB-工NF/daoContext.xml,/WEB-工NF/applicationContext.xml</param-value>
      </context-param>
      <!一采用load-on-startup Servlet 创建Applicat工onContext 实例一〉
      <servlet>
        <servlet-narne>context</servlet-narne>
        <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
        <!一下面值小一点比较合适,会优先加载一〉
        <load-on-startup>l</load-on-startup>
      </servlet>
    </web-app>
    复制代码

    二、使用匹配符

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

      比如说用到Hibernate,则把hibernate相关的配置放在applicationContext-hibernate.xml这一个文件,而一些全局相关的信息则放在applicationContext.xml,其他的配置类似.这样就可以加载了,不必写用空格或是逗号分开!

    三、如果使用Struts加载多个Spring配置文件

      下面这个配置的其实也是contextConfigLocation变量.struts-config.xml里面加这个

    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
      <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml,,,,,,,"/>

    四、如果是非j2ee应用程序加载

    复制代码
    ApplicationContext act = new ClassPathXmlApplicationContext(new String[]{"bean1.xml","bean2.xml"});
    BeanDefinitionRegistry reg = new DefaultListableBeanFactory();
    XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(reg);
    reader.loadBeanDefinitions(new ClassPathResource("bean1.xml"));
    reader.loadBeanDefinitions(new ClassPathResource("bean2.xml"));
    BeanFactory bf = (BeanFactory)reg;
  • 相关阅读:
    [leetcode] Combinations
    [leetcode] Search for a Range
    [leetcode] Combination Sum II
    [leetcode] Combination Sum
    [leetcode] Reverse Bits
    [leetcode] Number of 1 Bits
    [leetcode] Longest Substring Without Repeating Characters
    [leetcode] Reverse Words in a String
    [leetcode] Rotate Array
    习题8-3 数组循环右移
  • 原文地址:https://www.cnblogs.com/zz-1q/p/10351524.html
Copyright © 2020-2023  润新知