zoukankan      html  css  js  c++  java
  • (转)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;
  • 相关阅读:
    函数
    python操作文件
    POJ-2689-Prime Distance(素数区间筛法)
    POJ-2891-Strange Way to Express Integers(线性同余方程组)
    POJ-2142-The Balance
    POJ-1061-青蛙的约会(扩展欧几里得)
    Educational Codeforces Round 75 (Rated for Div. 2) D. Salary Changing
    Educational Codeforces Round 75 (Rated for Div. 2) C. Minimize The Integer
    Educational Codeforces Round 75 (Rated for Div. 2) B. Binary Palindromes
    Educational Codeforces Round 75 (Rated for Div. 2) A. Broken Keyboard
  • 原文地址:https://www.cnblogs.com/javahr/p/8408857.html
Copyright © 2011-2022 走看看