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