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文件