自動裝配、JavaConfig、XML 三種方案之間,怎么導入和混合配置?


在 Spring 中,這些配置方案都不是互斥的。完全可以將 JavaConfig 的組件掃描自動裝配/或 XML 配置混合在一起。

Q:如何在 JavaConfig 中引用 XML 配置?

Q:怎么將兩個 JavaConfig 類組合在一起?

 1 package soundsystem;
 2 
 3 import org.springframework.context.annotation.Bean;
 4 import org.springframework.context.annotation.Configuration;
 5 
 6 @Configuration
 7 public class CDConfig {
 8 
 9     @Bean
10     public CompactDisc compactDisc(){
11         return  new SgtPeppers();
12     }
13 }
 1 package soundsystem;
 2 
 3 import org.springframework.context.annotation.Bean;
 4 import org.springframework.context.annotation.Configuration;
 5 import org.springframework.context.annotation.Import;
 6 
 7 @Configuration
 8 @Import(CDConfig.class)
 9 public class CDPlayerConfig {
10 
11     @Bean
12     public CDPlayer cdPlayer(CompactDisc compactDisc) {
13         return new CDPlayer(compactDisc);
14     }
15 
16 }

②、一種更好的方式:創建一個更高級別的 SoundSystemConfig,並在這個類中使用 @Import 將兩個配置類組合在一起。

1 package soundsystem;
2 
3 import org.springframework.context.annotation.Configuration;
4 import org.springframework.context.annotation.Import;
5 
6 @Configuration
7 @Import({CDPlayerConfig.class, CDConfig.class})
8 public class SoundSystemConfig {
9 }

Q:該如何讓 Spring 同時加載 通過 XML 來配置的 BlankDisc 和 其他基於 Java 的配置呢?
A:@ImportResource 注解。假定 BlankDisc 定義在名為 cd-config.xml 文件中,該文件位於根類路徑下,那么可以修改 SoundSystemConfig ,讓它使用 @ImportResource 注解。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:c="http://www.springframework.org/schema/c"
 4        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 6 
 7     <bean id="compactDisc"
 8           class="soundsystem.BlankDisc"
 9           c:_0="titleValue"
10           c:_1="artist">
11         <constructor-arg>
12             <list>
13                 <value>tracks01</value>
14                 <value>tracks02</value>
15                 <value>tracks03</value>
16             </list>
17         </constructor-arg>
18     </bean>
19 </beans>

Q:如何在 XML 配置中引用 JavaConfig?

A:在 JavaConfig 配置中,展示了如何使用 @Import 和 @ImportResource 來拆分 JavaConfig 類。 
在 XML 中,我們使用 import 元素來拆分 XML 配置。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:c="http://www.springframework.org/schema/c"
 4        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 6 
 7     <!--
 8         我們將 BlankDisc 配置在 JavaConfig中,CDPlayer 繼續配置在 XML 中
 9         這時,<import>元素只能導入其他的 XML 配置文件,為了將 JavaConfig 類導入到 XML 配置中,我們使用 <bean> 元素。
10      -->
11     <bean class="soundsystem.CDConfig"/>
12 
13     <bean id="cdPlayer"
14         class="soundsystem.CDPlayer"
15         c:compactDisc-ref="compactDisc"/>
16 </beans> 

我們也可以創建一個更高層次的配置文件,這個文件不聲明任何的bean,只是負責將兩個或者更多的配置組合起來。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:c="http://www.springframework.org/schema/c"
 4        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 6 
 7     <bean class="soundsystem.CDConfig"/>
 8 
 9     <import resource="cdplayer-config.xml"/>
10 
11 </beans>

不管使用 JavaConfig 還是使用 XML 進行裝配,我通常都會創建一個根配置,這個配置會將兩個或更多的裝配類和/或 XML 文件組合起來。 
我也會在根配置中啟用組件掃描(通過 context:component-scan 元素 或 @ComponentScan)。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM