自动装配、JavaConfig、XML 三种方案之间,怎么导入和混合配置?
2017-07-24 21:57
465 查看
在 Spring 中,这些配置方案都不是互斥的。完全可以将 JavaConfig 的组件扫描和自动装配/或 XML 配置混合在一起。
A:①、使用 @Import 注解导入
②、一种更好的方式:创建一个更高级别的 SoundSystemConfig,并在这个类中使用 @Import 将两个配置类组合在一起。
Q:该如何让 Spring 同时加载 通过 XML 来配置的 BlankDisc 和 其他基于 Java 的配置呢?
A:@ImportResource 注解。假定 BlankDisc 定义在名为 cd-config.xml 文件中,该文件位于根类路径下,那么可以修改 SoundSystemConfig ,让它使用 @ImportResource 注解。
BlankDisc.java 的定义请参考前一篇。
在 XML 中,我们使用 import 元素来拆分 XML 配置。
我们也可以创建一个更高层次的配置文件,这个文件不声明任何的bean,只是负责将两个或者更多的配置组合起来。
不管使用 JavaConfig 还是使用 XML 进行装配,我通常都会创建一个根配置,这个配置会将两个或更多的装配类和/或 XML 文件组合起来。
我也会在根配置中启用组件扫描(通过 context:component-scan 元素 或 @ComponentScan)。
上一篇:Spring 如何通过 XML 装配 bean?
下一篇: 高级装配 —— Spring profile
Q:如何在 JavaConfig 中引用 XML 配置?
Q:怎么将两个 JavaConfig 类组合在一起?A:①、使用 @Import 注解导入
package soundsystem; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class CDConfig { @Bean public CompactDisc compactDisc(){ return new SgtPeppers(); } }
package soundsystem; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @Import(CDConfig.class) public class CDPlayerConfig { @Bean public CDPlayer cdPlayer(CompactDisc compactDisc) { return new CDPlayer(compactDisc); } }
②、一种更好的方式:创建一个更高级别的 SoundSystemConfig,并在这个类中使用 @Import 将两个配置类组合在一起。
package soundsystem; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @Import({CDPlayerConfig.class, CDConfig.class}) public class SoundSystemConfig { }
Q:该如何让 Spring 同时加载 通过 XML 来配置的 BlankDisc 和 其他基于 Java 的配置呢?
A:@ImportResource 注解。假定 BlankDisc 定义在名为 cd-config.xml 文件中,该文件位于根类路径下,那么可以修改 SoundSystemConfig ,让它使用 @ImportResource 注解。
BlankDisc.java 的定义请参考前一篇。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:c="http://www.springframework.org/schema/c" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoc d5c7 ation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="compactDisc" class="soundsystem.BlankDisc" c:_0="titleValue" c:_1="artist"> <constructor-arg> <list> <value>tracks01</value> <value>tracks02</value> <value>tracks03</value> </list> </constructor-arg> </bean> </beans>
package soundsystem; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.ImportResource; /** * 两个 bean —— ①、配置在 JavaConfig 中的 CDOlayer 以及 ②、配置在 XML 中的 BlankDisc * 都会被加载到 Spring 容器中。因为 CDCPlayer 中带有 @Bean 注解的方法接受一个 CompactDisc 作为参数, * 因此 BlankDisc 将会装配起来,此时与它是通过 XML 配置的没有任何关系。 */ @Configuration @Import({CDPlayerConfig.class) @ImportResource("classpath:cd-config.xml") public class SoundSystemConfig { }
Q:如何在 XML 配置中引用 JavaConfig?
A:在 JavaConfig 配置中,展示了如何使用 @Import 和 @ImportResource 来拆分 JavaConfig 类。在 XML 中,我们使用 import 元素来拆分 XML 配置。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:c="http://www.springframework.org/schema/c" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 我们将 BlankDisc 配置在 JavaConfig中,CDPlayer 继续配置在 XML 中 这时,<import>元素只能导入其他的 XML 配置文件,为了将 JavaConfig 类导入到 XML 配置中,我们使用 <bean> 元素。 --> <bean class="soundsystem.CDConfig"/> <bean id="cdPlayer" class="soundsystem.CDPlayer" c:compactDisc-ref="compactDisc"/> </beans>
我们也可以创建一个更高层次的配置文件,这个文件不声明任何的bean,只是负责将两个或者更多的配置组合起来。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:c="http://www.springframework.org/schema/c" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="soundsystem.CDConfig"/> <import resource="cdplayer-config.xml"/> </beans>
不管使用 JavaConfig 还是使用 XML 进行装配,我通常都会创建一个根配置,这个配置会将两个或更多的装配类和/或 XML 文件组合起来。
我也会在根配置中启用组件扫描(通过 context:component-scan 元素 或 @ComponentScan)。
上一篇:Spring 如何通过 XML 装配 bean?
下一篇: 高级装配 —— Spring profile
相关文章推荐
- spring对于bean的javaconfig,xml,自动装配三种装配方式实现
- Spring实战——XML和JavaConfig的混合配置
- Spring装配bean的三种方法:自动化装配,java代码装配,XML装配及它们的混合使用
- 装配Bean:XML与JavaConfig混合装配
- Spring实战之XML与JavaConfig的混合配置详解
- Spring实战——XML和JavaConfig的混合配置
- Spring实战——XML和JavaConfig的混合配置
- 第2章 装配Bean---xml和javaConfig混合使用装配---笔记5
- Spring实战——XML和JavaConfig的混合配置
- Spring学习(二十二) Bean配置的三种方式(XML、注解、Java类)介绍与对比
- Mybatis 如何自动生成bean dao xml 配置文件 generatorconfig.xml (mysql)
- Java web.xml session-config 属性配置
- 简化Spring的XML配置(一)——自动装配bean属性
- 在eclipse上编写好一个Java程序后,怎么自动的导入程序需要的包?
- MyEclipse中配置struts.xml了后但还是没有自动提示怎么办?
- Java web.xml session-config 属性配置
- Mybatis最入门---代码自动生成(generatorConfig.xml配置)
- Spring学习(16)--- 基于Java类的配置Bean 之 基于泛型的自动装配(spring4新增)
- java非web应用修改 properties/xml配置文件后,无需重启应用即可生效---自动加载
- 考虑使用JavaConfig替代XML配置