春天实战之XML与JavaConfig的混合配置详解

  

  

之前提到了关于春天的显示配置方式有两种,一种是基于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。

春天实战之XML与JavaConfig的混合配置详解