1. 程式人生 > >Spring學習之Spring三種裝配機制:(二)顯示裝配bean

Spring學習之Spring三種裝配機制:(二)顯示裝配bean

  今天我們介紹一下Spring三種裝配機制中的另外兩種裝配方式:JavaConfigXML配置,這兩種方式區別於自動化裝配方式都屬於顯示裝配。

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

   預設情況下:Spring中的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配置。