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