天天看點

spring加載多個xml配置檔案

1、首先從我自己用過的方法開始,非j2ee應用直接程式加載。很簡單,如下所示。

//多配置檔案加載的代碼
String[] configLocations = {"service-context.xml" , "datasource-context.xml"};
ApplicationContext act = new ClassPathXmlApplicationContext(configLocations);      

 2、在web.xml中定義 contextConfigLocation參數.spring會使用這個參數加載.所有”逗号”分割的xml。

<!-- 添加多配置檔案 -->  
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>
  	     classpath:datasource-context.xml
  	     classpath:model-context.xml
  	     classpath:service-context.xml
  	</param-value>

  </context-param>      

詳細說明如下:利用ServletContextListener 實作。

Spring 提供javax.servlet.ServletContextListener 的一個實作類org.springframeword.web.context.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 檔案的檔案頭二〉
<?xml version="1.0 " encoding="Iso8859-1"?>
< 1-- web.xm1 檔案的DTD 等資訊一〉
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems. 工口c.//DTD Web Application 2.3//EN" ''http://java.sun.com/dtd/web-app_2_3.dtd''>
<web-app>
<!一确定多個配置檔案>
<context-param>
<1-- 參數名為contextConfigLocation…〉
<param-name>contextConfigLocation</param-name>
<!一多個配置檔案之間以,隔開二〉
<param-value>/WEB-工NF/daoContext.xml./WEB-INF/application
Context.xml</param-value>
</context-param>

<!-- 采用listener建立ApplicationContext 執行個體-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>

      

 如果沒有contextConfigLocation 指定配置檔案,則Spring 自動查找applicationContext. xrnl 配置檔案。如果有contextConfigLocation,則利用該參數确定的配置檔案。該參數指定的一個字元串, Spring 的ContextLoaderListener 負責将該字元串分解成多個配置檔案,逗号","、空格" "及分号";"都可作為字元串的分割符。如果既沒有applicationContext. xrnl 檔案,也沒有使用contextConfigLocation參數确定配置檔案,或者contextConfigLocation确定的配置檔案不存在。都将導緻Spring 無法加載配置檔案或無法正常建立ApplicationContext 執行個體。

使用通配符加載多個xml。

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

 比如說用到Hibernate,則把hibernate相關的配置放在applicationContext-hibernate.xml這一個檔案,而一些全局相關的資訊則放在applicationContext.xml,其他的配置類似.這樣就可以加載了,不必寫用空格或是逗号分開!

3, 如果使用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,,,,,,,"/>