之前提到了关于春天的显示配置方式有两种,一种是基于XML配置,一种是基于JavaConfig的方式配置。对于这两种配置方式并不是互斥关系,相反,他们两能够相互融合,有效的搭配完成春天的bean注入。
这里分别介绍如何在JavaConfig中引用XML配置的bean以及如何在XML配置中引用JavaConfig。下面话不多说,来一起看看详细的介绍吧。
上篇我们看到配置类CDPlayerConfig具体代码如下
@ configuration 公开课CDPlayerConfig { @ bean 公共CompactDisc CompactDisc () { 返回新SgtPeppers (); } @ bean 公共CDPlayer CDPlayer (CompactDisc CompactDisc) { 返回新CDPlayer (compactDisc); } }
在该配置类中注册了两个bean。假设让CDPlayerConfig现在矫情一把,它认为自己内部注册的bean太多了,它有点管不过来了(确实有点矫情过了),它准备把compactDisc这个bean踢出去,让别人来管管。
让谁管呢,这时候我们又新建了另外一个配置类CDConfig
@ configuration 公开课CDConfig { @ bean 公共CompactDisc CompactDisc () { 返回新SgtPeppers (); } }
这个配置类简洁到不行,只有一个CompactDisc的bean。
现在有了这两个配置类,也集齐了两个豆,那么该如何把他们整合到一起呢,建立起它们的联系。这时候我们新建一个连接类SoundSystemConfig
@ configuration @ import (CDPlayerConfig。类,CDConfig.class) 公开课SoundSystemConfig { }
这样就解决了在一个配置类中要加载的bean过多的问题。
那么问题来了,如果这时候CompactDisc接口的实现类BlankDisc是声明在XML中,这两种显示声明又会如何结合呢。
公共类BlankDisc实现CompactDisc { 私人字符串标题; 私人字符串艺术家; 私人List跟踪; 公共BlankDisc(琴弦标题,艺术家,List 跟踪){ 这一点。标题=标题; 这一点。艺术家=艺术家; 这一点。跟踪=跟踪; } 公共空间玩(){ 系统。println(“玩”+标题+”“+艺术家); (字符串跟踪:跟踪){ 系统。println(“跟踪:“+跟踪); } } }
具体该类在XML中配置如下
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; & lt;豆类xmlns=" http://www.springframework.org/schema/beans " xmlns: xsi=" http://www.w3.org/2001/XMLSchema-instance " xmlns: c=" http://www.springframework.org/schema/c " xsi: schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”比; & lt; bean id=" compactDisc " 类=" soundsystem.BlankDisc " c: _0=" Sgt。胡椒的孤独之心俱乐部乐队” c: _1="披头士"比; & lt; constructor-arg> & lt; list> & lt; value> Sgt。胡椒的孤独之心俱乐部Band & lt; value>帮助一下我Friends & lt; value>天空中的露西Diamonds & lt; value>越来越Better Hole< & lt; value>修复;/value> & lt; !——……其他跟踪为了简便起见,我们省略了…——比; & lt;/list> & lt;/constructor-arg> & lt;/bean> & lt;/beans>
这里的<代码> c: _0 代码>和<代码> c: _1 代码>表示分别要传入到构造函数中的第一个参数和第二个参数的值,写法等价于
& lt; bean id=" compactDisc " 类=皊oundsystem.BlankDisc”比; & lt; constructor-arg值=" https://www.yisu.com/zixun/Sgt。胡椒的孤独之心俱乐部乐队”/比; 披头士& lt; constructor-arg值=" https://www.yisu.com/zixun/The "比; & lt;/bean>
或者
& lt; bean id=" compactDisc " 类=" soundsystem.BlankDisc " c: _title=" Sgt。胡椒的孤独之心俱乐部乐队” c: _artist="披头士"/祝辞
现在BlankDisc已经配置在XML中,那么春天如何去加载这个XML配置文件读取到这个配置信息并加载呢。这里我们可以通过一个注解@ImportResource来完成这个操作。假设上面关于BlankDisc类的配置信息存放在cd-config.xml文件中,该文件在项目的根路径下。通过修改SoundSystemConfig即可完成加载bean。