情景:在典型的Spring应用中,咱们可能会同时使用自动化和显式配置(JavaConfig)或者XML配置,幸亏在Spring中,这些配置方案都不是互斥的。你尽能够将JavaConfig的组件扫描和自动装配和/或XML配置混合在一块儿。spring
关于混合配置,第一件须要了解的事情就是在自动装配时,它并不在乎要装配的bean来自哪里。自动装配的时候会考虑到Spring容器中全部的bean,无论它是在JavaConfig或XML中声明的仍是经过组件扫描获取到的;component
例子:在CDPlayerConfig中使用@Import注解导入CDConfig;xml
CDConfig配置类:blog
CDPlayerConfig配置类:自动化
或者采用一个更好的办法,也就是不在CDPlayerConfig中使用@Import,而是建立一个更高级别的SoundSystemConfig,在这个类中使用@Import将两个配置类组合在一块儿:io
XML配置BlankDisc类:import
使用@ImportResource注解,假设BlankDisc定义在名为cd-config.xml的文件中,该文件位于根类路径下,那么能够修改SoundSystemConfig,让它使用@ImportResource注解,以下所示:容器
两个bean——配置在JavaConfig中的CDPlayer以及配置在XML中BlankDisc——都会被加载到Spring容器之中。由于CDPlayer中带有@Bean注解的方法接受一个CompactDisc做为参数(从spring容器),所以BlankDisc将会装配进来,此时与它是经过XML配置的没有任何关系。配置
在JavaConfig配置中,咱们已经展示了如何使用@Import和@ImportResource来拆分JavaConfig类。在XML中,咱们能够使用import元素来拆分XML配置。引用
好比,假设但愿将BlankDisc bean拆分到本身的配置文件中,该文件名为cd-config.xml,这与咱们以前使用@ImportResource是同样的。咱们能够在XML配置文件中使用<import>元素来引用该文件:
为了将JavaConfig类导入到XML配置中,咱们能够这样声明bean:
你可能还但愿建立一个更高层次的配置文件,这个文件不声明任何的bean,只是负责将两个或更多的配置组合起来。例如,你能够将CDConfig bean从以前的XML文件中移除掉,而是使用第三个配置文件将这两个组合在一块儿:
无论使用JavaConfig仍是使用XML进行装配,我一般都会建立一个根配置(root configuration),也就是这里展示的这样,这个配置会将两个或更多的装配类和/或XML文件组合起来。我也会在根配置中启用组件扫描(经过<context:component-scan>或@ComponentScan)。你会在本书的不少例子中看到这种技术。