下过雪的学校看起来就是不一样~~特别是像我这样起得很早的人...宽阔的路上熙熙攘攘的几个人,远处雪白的美景一览无余,怎么说呢,真希望时间永远停留在那一刹那。扯远了......还是喜欢早上写BOLG的感觉。
开发的系统因为使用了Spring2.0,所以涉及到了多配置文件的问题,虽然对我个人开发没有多大的帮助,但是团体开发却少不了这个东西。
下面就来讲讲我所涉及到的多配置文件
1. 普通: 因为是Web Protect 而且是自下而上开发,所以没有界面可以测试,只能自己开个Main Class测试, 这回它就成了一个普通的Java Protect, 如何导入多XML,我看了Spring2.0的API, 发现 ApplicationContext的构造函数居然有N个,除却最基本的单XML导入,还看到了一种导入数组的形式。 哈, 马上试试。发现居然成功了:
String[] configLocations = {"applicationContext-main.xml","applicationContext-hibernate.xml"};
ApplicationContext context = new ClassPathXmlApplicationContext(configLocations);
2. Web: 如果在Web上整合, 那么只需配置Web.xml,,如:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
其中 applicationContext-*.xml 是一种通配符的形式, 你也可以写完整的.....
3. 在网上查了一下,发现还有几种形式, 但是比较之下发现并不实用:
把几个配置文件写在一个配置文件里,如:
<beans>
<bean id="default" class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg>
<list>
<value>applicationContext.xml</value>
<value>applicationContext-business.xml</value>
<value>applicationContext-scheduler.xml</value>
</list>
</constructor-arg>
</bean>
</beans>
然后在web.xml文件中,使用自己定义一个ContextLoaderServlet来启动,这个ContextLoaderServlet 可以继承HttpServlet,然后在它的init()方法里取得BeanFactory,代码如下:
public class ContextLoaderServlet extends HttpServlet {
public ContextLoaderServlet()
{
}
public void init() throws ServletException
{
//这个参数里的名字就是我们在BeanRefFactory.xml里定义的bean的名字。
DefaultBeanFactory.getFactory("default");
}
public void destroy()
{
}
}
然后定义一个DefaultBeanFactory类:
public class DefaultBeanFactory {
protected static final BeanFactory getFactory(String s)
{
BeanFactoryLocator beanfactorylocator =SingletonBeanFactoryLocator.getInstance();
BeanFactoryReference beanfactoryreference = beanfactorylocator.useBeanFactory(s);
return beanfactoryreference.getFactory();
}
}
最后在web.xml文件中配置如下:
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>com.lixh.web.servlet.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
这种方式改动较多,也比较麻烦,但是可以根据自己的需要随机加载信息。