Spring裝配Bean(二)

z1340954953發表於2018-05-21

通過java程式碼裝配bean

很多場景下通過元件掃描和自動裝配實現Spring的自動化配置是更為推薦的方案,但是有時候自動化配置方案,不行,比如說將第三方的元件裝配到應用中,無法在它的類上新增@Component,@Autowire註解,此時使用

顯示裝配的方式:java 和xml兩種,後面一片文章介紹xml配置

* 建立配置類

package com.erong.service;

import org.springframework.context.annotation.Configuration;

@Configuration
public class CDPlayerConfig {

}

@Configuration註解表名這個類是一個配置類,該類應該包含在Spring應用上下文中如何建立bean的細節

宣告簡單的bean

編寫一個方法,這個方法中會去建立所需要型別的例項,然後給這個方法加上bean註解

@Bean(name="sgt")
public CompactDisc sgtPeppers(){
       return new SgtPeppers();
}

@Bean註解表示返回的物件將註冊為一個Bean,並且可以通過name屬性修改生成的Bean的id,預設情況下Bean的ID是方法名

藉助JavaConfig實現注入

在JavaConfig中裝配bean的最簡單的方式就是引用建立bean的方法

@Bean
public CDPlayer cdplayer(){
    return new CDPlayer(sgtPeppers());
}

這裡同樣使用@Bean註解,表明這個方法建立一個bean例項並將其註冊到Spring應用上下文中。

sgtPeppers方法上新增@Bean註解,Spring將會攔截所有對它的呼叫,並確保直接返回該方法建立的bean,而不是每次都對其進行實際的呼叫。

假如,引入了一個其他的CDPlayer bean,它和之前那個bean完全一樣。

@Bean
public CDPlayer cdplayer(){
	return new CDPlayer(sgtPeppers());
}
@Bean
public CDPlayer anotherCDPlayer(){
	return new CDPlayer(sgtPeppers());
}

預設情況下,Spring是單例的,也就是在第二次呼叫sgtPeppers方法時候,是同一個bean

另外,通過將例項作為方法引數進行注入的方式, 這種情況下是一種自動注入風格,會在Spring上下文中

找到bean,並且注入

@Bean
public CDPlayer cdplayer(CompactDisc cd){
	return new CDPlayer(cd);
}

注意,@Bean註解可以採用任何java方法產生例項

測試

package com.erong.service;


import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class CDPlayerTest {
	@Autowired
	private CDPlayer cdplayer;
	@Test
	public void test(){
		cdplayer.play();
	}
}

Spring上下文需要加在的配置類設定為CDPlayerConfig,Spring上下文建立時候就自動建立bean,測試OK

相關文章