Spring學習之Spring三種裝配機制:(二)顯示裝配bean
今天我們介紹一下Spring三種裝配機制中的另外兩種裝配方式:JavaConfig和XML配置,這兩種方式區別於自動化裝配方式都屬於顯示裝配。
1、Java程式碼裝配bean
首先,我們通過在Config類中使用@Bean註解來宣告bean; @Bean註解會告訴Spring其註解的方法會返回一個物件,該物件要註冊為Spring上下文中的bean。 @Bean(name = “id”) :我們可以通過這種方式設定bean的ID,例如一個ID名為“id”的bean。
@Configuration public class CDPlayerConfiger { @Bean //通過該註解實現java程式碼裝配bean public CompactDisc sgtPeppers(){ return new SgtPeppers(); } @Bean public CDPlayer cdPlayer(){ //依賴於 CompactDisc 的bean return new CDPlayer(sgtPeppers()); } }
在宣告bean完成後,即可在測試中通過@Autowired註解實現自動注入或通過下面的程式碼
ApplicationContext acx = new AnnotationConfigApplicationContext(CDPlayerConfiger.class);
CDPlayer cdPlayer = (CDPlayer) acx.getBean("cdPlayer");
來獲得bean。
注意: 在使用@Bean註解得到目標物件的bean這個過程好像是通過呼叫@bean註解的方法來實現的。 實際上,在每次呼叫@bean註解的方法時,Spring會對其呼叫進行攔截,然後直接將Spring上下文中的bean例項(該例項也是通過呼叫方法實現的,但是僅呼叫一次)進行返回。也就是說不論呼叫幾次最後得到的是同一個bean
/**
* 這裡得到的兩個bean實際上是同一個bean
*/
@Bean
public CDPlayer cdPlayer(){
return new CDPlayer(sgtPeppers());
}
@Bean
public CDPlayer anotherCdPlayer(){
return new CDPlayer(sgtPeppers());
}
2、XML配置
XML配置是Spring剛出現時的主要方式,因此有必要了解掌握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="compactDisc" class="soundsystem.collections.BlankDisc">
<constructor-arg value="Sgt. Pepper's Lonely Hearts Club Band" />
<constructor-arg value="The Beatles" />
<constructor-arg>
<list>
<value>Sgt. Pepper's Lonely Hearts Club Band</value>
<value>With a Little Help from My Friends</value>
</list>
</constructor-arg>
</bean>
<bean id="cdPlayer" class="soundsystem.CDPlayer">
<constructor-arg ref="compactDisc" />
</bean>
</beans>
在上面的配置檔案中,我們看到:
1、可以通過<bean>
標籤來裝配bean,我們可以設定id,並利用class=“全路徑類名”
的方式來宣告bean;
2、我們可以藉助<constructor-arg>
元素來使用構造器注入初始化bean;value值為構造器輸入引數(可以為list列表);
3、在ID為cdPlayer的bean的宣告中,我們可以將一個ID為compactDisc的bean引用傳給CDPlayer的構造器。
此外:我們還可以通過c- 名稱空間和 p- 名稱空間來實現構造器注入和設定屬性;在使用名稱空間時,需要我們進行如下宣告:
xmlns:c="http://www.springframework.org/schema/c"
xmlns:p="http://www.springframework.org/schema/p"
這裡我們不再做過多介紹XML配置。