【轉】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中,其它的配置文件相似,這樣就沒必要用空格或逗號分開多個配置文件了。

相關文章
相關標籤/搜索