溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Spring使用多個(gè)xml配置文件的方法

發(fā)布時(shí)間:2021-03-12 11:36:23 來(lái)源:億速云 閱讀:408 作者:小新 欄目:編程語(yǔ)言

這篇文章給大家分享的是有關(guān)Spring使用多個(gè)xml配置文件的方法的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

1, 在web.xml中定義 contextConfigLocation參數(shù).spring會(huì)使用這個(gè)參數(shù)加載.所有逗號(hào)分割的xml.如果沒(méi)有這個(gè)參數(shù),spring默認(rèn)加載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,
classpath*:conf/spring/applicationContext_staff*.xml,classpath*:conf/spring/applicationContext_security.xml
classpath*:conf/spring/applicationContext_modules*.xmlclasspath*:conf/spring/applicationContext_cti*.xml
classpath*:conf/spring/applicationContext_apm*.xml</param-value>
</context-param>

contextConfigLocation 參數(shù)定義了要裝入的 Spring 配置文件。原理說(shuō)明如下:

1.利用ServletContextListener 實(shí)現(xiàn)。
Spring 提供ServletContextListener 的一個(gè)實(shí)現(xiàn)類ContextLoaderListener ,該類可以作

為listener 使用,它會(huì)在創(chuàng)建時(shí)自動(dòng)查找WEB-INF/ 下的applicationContext.xrnl 文件。因
此,如果只有一個(gè)配置文件,并且文件名為applicationContext.xml ,則只需在web.xml

文件中增加如下代碼即可:

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

如果有多個(gè)配置文件需要載入,則考慮使用<context-para即元素來(lái)確定配置文件的
文件名。由于ContextLoaderListener加載時(shí),會(huì)查找名為contextConfigLocation的參數(shù)。

因此,配置context-param時(shí)參數(shù)名字應(yīng)該是contextConfigLocation。
帶多個(gè)配置文件的web.xml 文件如下:

<1-- XML 文件的文件頭二〉<?xml version="l.O" encoding="工80-8859-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><!一確定多個(gè)配置文件>
<context-param><1-- 參數(shù)名為contextConfigLocation…〉
<param-name>contextConfigLocation</param-name><!一多個(gè)配置文件之間以,隔開(kāi)二〉
<param-value>/WEB-工NF/daoContext.xml./WEB-INF/applicationContext.xml</param-value>
</context-param><!-- 采用listener創(chuàng)建Applicat工onContext 實(shí)例-->
<listener><listener-class>org.spr工ngframework.web.context.ContextLoader
Listener</listener-class></listener></web-app>

如果沒(méi)有contextConfigLocation 指定配置文件,則Spring 自動(dòng)查找application
Context. xrnl 配置文件。如果有contextConfigLocation,則利用該參數(shù)確定的配置文件。

該參數(shù)指定的一個(gè)字符串, Spring 的ContextLoaderListener 負(fù)責(zé)將該字符串分解成多個(gè)
配置文件,逗號(hào)","、空格" "及分號(hào)";"都可作為字符串的分割符。

如果既沒(méi)有applicationContext. xrnl 文件,也沒(méi)有使用contextConfigLocation參數(shù)確
定配置文件,或者contextConfigLocation確定的配置文件不存在。都將導(dǎo)致Spring 無(wú)法

加載配置文件或無(wú)法正常創(chuàng)建ApplicationContext 實(shí)例
配置一個(gè)spring為加載而設(shè)置的servlet可以達(dá)到同樣效果.

采用load-on-startup Servlet 實(shí)現(xiàn)。
Spring 提供了一個(gè)特殊的Servllet 類: ContextLoaderServlet。該Servlet 在啟動(dòng)時(shí),會(huì)

自動(dòng)查找WEB-IN日下的applicationContext. xml 文件。
當(dāng)然,為了讓ContextLoaderServlet 隨應(yīng)用啟動(dòng)而啟動(dòng),應(yīng)將此Servlet 配置成

load-on-startup 的Servleto load-on-startup 的值小一點(diǎn)比較合適,因?yàn)橐WCApplication
Context 優(yōu)先創(chuàng)建。如果只有一個(gè)配置文件,并且文件名為applicationContext. xml ,則在

web.xml 文件中增加如下代碼即可:

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

。帶多個(gè)配置文件的web且nl 文件如下:

<!-- XML 文件的文件頭--><?xml version="1.0" encoding="工SO-8859-1"?>
<! -- web.xml 文件的DTD 等信息→<!DOCTYPE web-appPUBLIC "-//Sun Microsystems , 工口c.//DTD Web Application 2.3//EN"
''http://java.sun.com/dtd/web-app_2_3.dtd''><web-app>
<'一確定多個(gè)配置文件一><context-param>
<!-- 參數(shù)名為contextConfigLocation--><param-name>contextConfigLocation</param-name><!-- 多個(gè)配置文件之間以,隔開(kāi)一〉
<param-value>/WEB-工NF/daoContext.xml, !WEB-工NF/applicationContext.xml</param-value>
</context-param><!一采用load-on-startup Servlet 創(chuàng)建Applicat工onContext 實(shí)例一〉
<servlet><servlet-narne>context</servlet-narne>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<!一下面值小一點(diǎn)比較合適,會(huì)優(yōu)先加載一〉<load-on-startup>l</load-on-startup></servlet>
</web-app>

2, 使用匹配符

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

比 如說(shuō)用到Hibernate,則把hibernate相關(guān)的配置放在applicationContext-hibernate.xml這一個(gè)文件,而一

些全局相關(guān)的信息則放在applicationContext.xml,其他的配置類似.這樣就可以加載了,不必寫(xiě)用空格或是逗號(hào)分開(kāi)!

3, 如果使用struts加載多個(gè)spring配置文件.下面這個(gè)配置的其實(shí)也是contextConfigLocation變量.
struts-config.xml里面加這個(gè)

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

4,如果是非j2ee應(yīng)用直接程序加載.

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;

最后,解釋以下classpath*:與classpath的區(qū)別:

classpath*:的出現(xiàn)是為了從多個(gè)jar文件中加載相同的文件.classpath:只能加載找到的第一個(gè)文件.

感謝各位的閱讀!關(guān)于“Spring使用多個(gè)xml配置文件的方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI