Spring学习笔记(五) --- 装配Bean之导入和混合配置
来源:互联网 发布:淘宝按重量标价 编辑:程序博客网 时间:2024/06/05 00:33
本系列博客为spring In Action 这本书的学习笔记
前言
之前在Spring学习笔记(三) — 装配Bean之通过Java代码装配Bean的最后提到:
在这里, Spring会自动给cdPlayer()方法匹配一个CompactDisc类型的Bean, 甚至这个Bean可以不在这个JavaConfig中, 它可以通过组件扫描或者通过XML进行配置来被这里的cdPlayer()方法使用.
说实话, 当时我不是很明白这段话的意思, 因为书中提到JavaConfig中被装配的Bean可以不必要是在本JavaConfig文件中声明的, 它可以来自其它的JavaConfig, 甚至都可以来自其它的XML配置文件, 于是我就去试验了一下, 我在XML中声明了一个CompactDisc Bean, 希望被本JavaConfig中的CDplayer Bean自动装配, 然而并没有成功, IDEA还是报错:没有找到匹配的Bean. 如果你也曾有这样的疑惑, 那么你就能在这篇博客里找到答案.
混合配置, 顾名思义, 就是将两种装配方式混合使用. 我们可以在JavaConfig中引入XML配置, 也可以在XML配置中引用JavaConfig. 而前面提到的我之前遇到的问题, 就是因为我没有在JavaConfig中正确地引用XML配置. 那么下面来看看具体如何操作吧.
1. 在JavaConfig中导入配置
(1) 在JavaConfig中引入另一个 JavaConfig
之前我们在JavaConfig配置中写过一个CDPlayerConfig, 贴出它的代码来看一下:
程序1: CDPlayerConfig
@Configurationpublic class CDPlayerConfig { @Bean public CompactDisc jay(){ return new Jay(); } @Bean public CDPlayer cdPlayer(CompactDisc compactDisc){ return new CDPlayer(compactDisc); }}
在上面地代码中, 我们将CompactDisc Bean和CDPlayer Bean装配在了一个JavaConfig中, 现在, 我们觉得应该将CompactDisc类型的Bean和CDPlayer类型的Bean应该分开配置, 所以要将CompactDisc Bean从CDPlayerConfig中拎出来. 像下面这样:
程序2: CDConfig
@Configurationpublic class CDConfig { @Bean public CompactDisc compactDisc(){ return new Jay(); }}
此时要将这两个Bean装配在一起, 我们可以在CDPlayerConfig中使用@Import标注将CDConfig导入. 如下:
程序3: CDPlayerConfig
@Configuration@Import(CDConfig.class)public class CDPlayerConfig { @Bean public CDPlayer cdPlayer(CompactDisc compactDisc){ return new CDPlayer(compactDisc); }}
或者如果不想在CDPlayerConfig中使用@Import标注, 我们可以再重新创建一个Config, 将这两个Config都导入, 如下:
程序4: SoundSystemConfig
@Configuration@Import({CDPlayerConfig.class, CDConfig.class})public class SoundSystemConfig {}
不知道你们有没有发现问题! 如果再CDPlayerConfig中去掉了@Import标注, 那么cdPlayer这个方法就会报错, 这是因为它强依赖于一个CompactDisc Bean, 当我们去掉了@Import标注之后, 再CDPLayerConfig中就找不到一个CompactDisc的Bean, 这样在CDPlayerConfig中就会报错.
然而! 这里报错, 并不会影响最终程序的运行!!! 运行结果仍是正确的, 注入也是成功了的, 所以不必理会这里的报错.
(2) 在JavaConfig中导入XML配置
程序5: 一个简单的XML配置文件CDMix.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" 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 id="jay" class="com.SoundSystem_Mix.Jay" /></beans>
程序6: 导入CDMix.xml和CDPlayerConfig的SoundSystemConfig
@Configuration@Import(CDPlayerConfig.class)@ImportResource("classpath:CDMix.xml")public class SoundSystemConfig {}
而我前面遇到的那个问题是因为我没有将那个XML文件使用@Import标注导入进来, 所以Spring提示无法找到那个Beam.
2. 在XML中导入配置
我们在JavaConfig中引用另外一个JavaConfig或者XML文件, 使用的是@Import标注, 那么在XML配置文件, 引用另外一个XML配置文件或JavaConfig需要用到<import>元素.
先来看一下如何让在XML配置文件中引用另一个XML配置文件.
(1) 在XML配置文件中引用XML文件
程序7: 在XML配置文件中引用另一个XML文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" 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"> <import resource="CDMix.xml" /> <bean id="cdPlayer" class="com.SoundSystem_Mix.CDPlayer" /></beans>
(2) 在XML配置文件中引用JavaConfig
在XML配置文件中引用JavaConfig与在XML中引用XML还略微有一点不同.
在XML中引用JavaConfig要将引入的JavaConfig声明为一个Bean, 代码如下:
程序8: 在XML中引用JavaConfig
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" 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="com.SoundSystem_Mix.CDConfig" /> <bean id="cdPlayer" class="com.SoundSystem_Mix.CDPlayer" /></beans>
- Spring学习笔记(五) --- 装配Bean之导入和混合配置
- Spring学习笔记(五) --- 装配Bean之导入和混合配置
- spring学习总结(五):IOC & DI 配置 Bean 之自动装配及bean之间的关系
- Spring学习笔记之Bean装配
- Spring学习笔记之Bean的装配
- Spring学习笔记之自动化装配Bean
- 2.Spring学习笔记之装配Bean
- Spring学习笔记(5.Spring Bean装配之Bean的配置项及作用域)
- Spring学习笔记(二) --- 装配Bean之自动化装配
- Spring学习笔记(四) --- 装配Bean之通过XML装配
- Spring学习笔记(六) --- 装配Bean之高级装配
- Spring学习笔记(9.Spring Bean装配之Resource)
- Spring学习笔记—Spring之旅 . -----装配Bean
- Spring学习五:Bean自动装配
- Spring学习(五):自动化装配Bean
- Spring学习笔记(三) --- 装配Bean之通过Java代码装配Bean
- Spring学习笔记之通过Java代码装配Bean
- Spring学习笔记-C2-Spring装配Bean
- python3 函数写文件路径时,怎么写文件路径才正确
- Douglas-Peucker压缩算法
- 文件
- 主见和索引的区别
- Tian Ji -- The Horse Racing
- Spring学习笔记(五) --- 装配Bean之导入和混合配置
- 深度优先搜索从零突破
- FYN OI 奋斗之路8~
- Codeforces Round #435 (Div. 2)
- 【数学分析】BZOJ1041(HAOI2008)[圆上的整点]题解
- UVA
- Java| Java对象克隆Clone(2)
- 欢迎使用CSDN-markdown编辑器
- 清华第八战告捷!“路漫漫其修远兮,吾将上下而求索”……