1.原來在我開發的項目中由于是多人協作開發,所以我會把Spring的配置文件按人分成多個。然后不論是單元測試還是通過web集成測試,都會把所有的文件裝載進來。
單元測試的時候(或者其他不通過web裝載的情況),使用DefaultBeanFactory類和beanRefFactory.xml配置文件
有的時候單元測試相關的類很少的時候,我會單獨寫一個bean的配置文件,進行單元測試。
web集成測試的時候直接在web.xml中配置
<context-param>
??<param-name>contextConfigLocation</param-name>
??<param-value>
???/WEB-INF/classes/WebApplicationContext.xml
???/WEB-INF/classes/HibernateContext.xml
???/WEB-INF/classes/WebApplicationContext_C.xml
.......
??</param-value>
?</context-param>
2.通過觀察jpetstore項目,它的配置文件是按照web/service/dao這樣的層次進行劃分。
對于一些web services接口也會有專門的配置文件。
這樣的話結構就會非常的清晰,所以在項目穩定,進入維護期的時候,可以把配置文件按照業務邏輯的層次進行劃分。
3.為了能夠靈活配置,例如向一些數據庫連接的配置,因為大部分情況都是本地、測試服務器、正式服務器的配置是不同的,所以一般會通過寫一個jdbc.properties,在屬性文件中進行配置。
4.在同時加在多個spring的配置文件的時候,也是有好多靈活的方法,這方面spring做的真強。上面說了兩種,還可以在applicationContext.xml文件中<beans>標簽的后面,緊接著加入:
<import resource="dataAccessContext-local.xml"/>這樣的導入資源的語句。然后不同的環境可以使用不同的配置,不過這還需要每次都修改applicationContext.xml文件。該方法不如直接在web.xml中配置多個方便,但是也不是絕對。
5.最后還有一種更加方便的方法,可以不用修改applicationContext.xml文件,然后就能夠自動裝載相關的配置文件。
首先,寫一個類:
package com.xiebing.spring.util;
import java.net.InetAddress;
import org.springframework.web.context.support.XmlWebApplicationContext;
/**
?* TODO file description *
?*
?* @author bing.xie
?*
?* @version 1.0, 2006-5-10? create
?*/
/**
?* @author bing.xie
?*?2006-5-10
?*/
public class PerHostXmlWebApplicationContext extends XmlWebApplicationContext {
?protected String[] getDefaultConfigLocations(){
??String hostname = "localhost";
??
??try{
???hostname = InetAddress.getLocalHost().getHostName();
??}catch(Exception e){
???
??}
??String perHostConfiguration = DEFAULT_CONFIG_LOCATION_PREFIX
??????+ "applicationContext-"
??????+ hostname
??????+ DEFAULT_CONFIG_LOCATION_SUFFIX;
??if(getNamespace() != null){
???return new String[]{
?????DEFAULT_CONFIG_LOCATION_PREFIX
?????+ this.getNamespace()
?????+ DEFAULT_CONFIG_LOCATION_SUFFIX
?????,perHostConfiguration};
??}else{
???return new String[]{
????DEFAULT_CONFIG_LOCATION,perHostConfiguration};
??}
?}
}
這種主要是通過動態的獲取主機名來動態配置的。所以對于不同的環境使用applicationContext-[hostname].xml就可以封裝變化了。當然了,也可以不用hostname(如果發現其他方便的方式)
接下來,就是在web.xml中增加配置:
<context-param>
??<param-name>contextClass</param-name>
??<param-value>com.xiebing.spring.util.PerHostXmlWebApplicationContext</param-value>
?</context-param>
這種方法就是要求在不同的環境下有不同的applicationContext-[hostname].xml文件