Spring多配置文件有什么好处?直接写在一个配置文件里不就完了么?而且多配置文件不是会增加读取配置文件的开销么?其实我当我第一次碰到这些我也有这些问题,但在公司实习的一段时间我看到了它的一些优点,下面说下我自己的看法:
首先,如果一直把眼光停留在小工程小项目的层次上是无法理解这其中的好处,在企业级的项目中,Spring的配置文件中是会有很多东西的,所以这是其中一点:按照目的、功能去拆分配置文件,可以提高配置文件的可读性与维护性,如将配置事务管理、数据源等少改动的配置与配置bean单独分开。当我们是团队开发的时候,每个人虽然都负责自己的模块,但使用Spring如果只是一个配置文件,那么我们的工作经常会有交集,其中一个交集就是在Spring配置文件中增加自己的bean,这样会给团队开发带来一定的不便,所以bean配置文件又可以被分成多个配置文件,最终在一个配置文件中将所有import进来,这是另外一点。
Spring读取配置文件的几种方式:
1、使用Spring自身提供的ApplicationContext方式读取
在Java程序中可以使用ApplicationContext两个实现类ClassPathXmlApplicationContext以及
FileSystemXmlApplicationContext来读取多个配置文件,他们的构造器都可以接收一个配置文件数组
如: ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocations);与采用FileSystemXmlApplicationContext创建ApplicationContext的方式相似,区别仅在于二者搜索配置文件的路径不同:ClassPathXmlApplicationContext通过CLASSPATH路径搜索配置文件:而
FileSystemXmlApplicationContext则在当前路径搜索配置文件。
2、使用web工程启动时加载
在web.xml中配置web容器启动是自动加载哪些配置文件:
<servlet> <servlet-name>app</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext*.xml,/WEB- INF/user_spring.xml</param-value> </context-param> <load-on-startup>1</load-on-startup> </servlet>
3、Xml配置文件中导入其他配置文件
在/WEB-INF/applicationContext.xml配置应用服务去加载,可以在applicationContext.xml中用import引入其他的配置文件
<?xml version="1.0" encod工口g="gb2312"?>
<!一指定Spring 配置文件的dtd>
<!DOCTYPE beans PUBLIC "-IISPR工NGIIDTD BEANIIEN"
''http://www.springframework.org/dtd/spring-beans.dtd''>
<!-- Spring 配置文件的根元素->
<beans>
<!--导入hibernate的配置文件 -->
<import resource="com/demo/res/hibernate.xml"/>
<!--导入多个bean配置文件 -->
<import resource="com/demo/res/bean1.xml"/>
<import resource="com/demo/res/bean2.xml"/>
<!-- 下面也可以再定义该文件的其他bean --〉
<bean id="bean1" class=". ..">
<bean id="bean2" class="...">
</beans>
然后再说一下引用其他bean即ref的一些属性,在多配置文件上也会用到:
<ref>
指定了属性对BeanFactory中其他Bean的引用关系。
bean属性:指定了属性对BeanFactory中其他Bean的引用关系,它可以跨xml寻找bean,多个配置文件中,有时会用到其他配置文件里的bean。
local属性:指定了属性对BeanFactory中其他Bean的引用关系,但仅在本地(同一个)xml文件里寻找对应的bean,如果我们确定引用的bean只会存在当前的配置文件中,使用该属性的话相对来说会快一些。