Spring加载多个XML 配置文件

对于大多数的应用,从表现层的action,到持久层的DataSource,都被Spring 作为
bean 管理。如果这些bean 被配置在同一个文件中,阅读及维护该配置文件将是一件非
常有挑战的事情。
因此, Spring 建议:将一个大的配置文件分解成多个小的配置文件,使每个配置文
件仅仅管理功能近似于bean; 这样不仅可以分散配置文件,降低修改配置文件的风险,
而且更符合"分而治之"的软件工程原理。
多个配置文件最终需要汇总, ApplicationContext提供如下方式来汇总多个配置文件:
.使用App1icationContext 加载多个配置文件。
• Web 应用启动时加载多个配置文件。
• XML 配置文件中导入其他配置。

1 ApplicationContext 加载多个配置文件
ApplicatonContext 的常用实现类有如下两个:
• ClassPathXm1 ApplicationContext 。
• FileSystemXm1ApplicationContext 。
这两个类都可以用来加载多个配置文件,它们的构造器都可以接收一个数组,并在
该数组中存放多个配置文件。ClassPathXm1ApplicationContext 可采用如下代码加载多个
配置文件:
/I创建配置文件数组
/I假设有3 个配置文件: a.xml , b.xml , c.xml
Str工ng[) configLocations = {"a.xml" , "b.xml" , "c.xml"}
以配置文件数组为参数,创建ApplicationContext
ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocations);
与采用FileSystemXm1ApplicationContext创建ApplicationContext的方式相似,区别
仅在于二者搜索配置文件的路径不同:ClassPathXm1ApplicationContext通过CLASSPATH
路径搜索配置文件:而FileSystemXm1ApplicationContext则在当前路径搜索配置文件。
2 Web 应用启动时加载多个配置文件
参看5.12.3 节所述,通过ContextLoaderListener 也可加载多个配置文件,可利用
337
轻量级J2EE 企业应用实战一一-Struts+Spring+Hibernate 整合开发
<context-pararn>元素来指定多个配置文件位置,其配置如下:
<l-- 确定配置文件的位置一〉
<context-param>
<param-name>contextConfigLocation</param-name>
<1-- 此处可以列出多个Spring 的XML 配置文件>
<param-value>/WEB-INF/daoContext.xml IWEB-INF/applicationContext.xml<1
param-value>
<context-param>
3 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>
<!一导入第→份配置文件: serv工ces.xml一〉
<import resource="serv工ces.xml"l>
<!-- 导入第二份配置文件: resources/messageSource.xml 一〉
<import resource="resources/messageSource.xml"l>
<!-- 导入第二份配置文件: resourcesl themeSource.xml -->
<import resource="/resources/themeSource.xml"l>
<!-- 下面定义该文件垦的其他bean…〉
<bean id="beanl" class=". .."1>
<bean id="bea口2" class="..."I>
</beans>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring配置文件加载优先级由以下顺序决定: 1. 在classpath根路径下寻找的application.properties或application.yml文件; 2. 在classpath根路径下寻找的application-{profile}.properties或application-{profile}.yml文件; 3. 在classpath根路径下寻找的spring.properties文件; 4. 在classpath根路径下寻找的spring.xml文件; 5. 在classpath根路径下寻找的{filename}.properties文件; 6. 在classpath根路径下寻找的{filename}.yml文件; 7. 在classpath根路径下寻找的{filename}.xml文件; 8. 在文件系统中寻找的config目录下的application.properties或application.yml文件; 9. 在文件系统中寻找的config目录下的application-{profile}.properties或application-{profile}.yml文件; 10. 在文件系统中寻找的config目录下的{filename}.properties或{filename}.yml文件; 11. 在文件系统中寻找的config目录下的{filename}.xml文件; 12. 在jar包内寻找的/META-INF/spring.factories文件。 如果有多个文件符合要求,那么它们将按照上述顺序进行合并,后加载的配置将覆盖先加载的配置。 ### 回答2: Spring配置文件加载优先级是根据不同的方式来决定的。在Spring中,可以通过多种方式来加载配置文件,包括通过XML配置(如applicationContext.xml)、通过注解和通过Java代码配置等方式。 首先,在使用XML配置的情况下,Spring框架会首先查找默认的配置文件 applicationContext.xml加载配置信息,如果没有默认配置文件,框架会报错。如果存在默认配置文件,那么可以使用其它名称的XML配置文件来进行覆盖或扩充配置。例如,可以使用 `<import>` 元素来引入其它的配置文件,而引入的配置文件会按照顺序进行加载。 其次,在使用注解的情况下,Spring框架会扫描指定的包路径,查找带有相应注解的类,并将其作为配置类加载。可以使用 `@ComponentScan` 注解来指定扫描的包路径,也可以使用 `@Import` 或 `@ImportResource` 注解来导入其它的配置类或XML配置文件。 最后,在使用Java代码配置的情况下,Spring框架会通过编写配置类来进行配置。可以使用 `@Configuration` 注解标识一个类为配置类,并在该类中使用 `@Bean` 注解来定义需要创建的Bean。在使用Java配置时,Spring框架会将这些配置类作为参数进行加载。 总的来说,Spring配置文件加载的优先级为:默认XML配置文件 > 其它XML配置文件 > 注解扫描 > Java配置类。在加载的过程中,后加载的配置会覆盖前面加载的配置,从而实现对配置文件的灵活管理和定制。 ### 回答3: Spring配置文件加载优先级主要取决于以下几个因素: 1. 默认配置文件位置:Spring框架会默认加载位于classpath根目录下的名为"applicationContext.xml"的配置文件。如果该文件存在,则会自动加载,优先级最高。 2. 自定义配置文件位置:开发者可以通过在web.xml或者Spring配置文件中指定需要加载配置文件路径。如在web.xml中配置contextConfigLocation参数,或在@Configuration注解类中使用@PropertySource注解指定配置文件路径。 3. 注解配置类:使用@Configuration注解标记的Java配置类,可以替代XML配置文件Spring会自动扫描这些类,并将其作为配置文件加载。注解配置类的加载顺序比xml配置文件更早。 4. @Import注解:@Import注解可以用于导入其他配置类,以声明式地将多个配置类组织在一起。通过@Import注解导入的配置类会先于其他配置文件进行加载。 综上所述,Spring配置文件加载的优先级为:注解配置类 > @Import注解 > 自定义配置文件位置 > 默认配置文件位置。 同时,根据不同的实际项目需求,我们可以使用多个配置文件进行配置,通过上述方式控制加载的顺序和优先级,以满足不同场景下的配置需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值