1. 程式人生 > >Spring. 通過Java程式碼裝配bean

Spring. 通過Java程式碼裝配bean

儘管在很多情況下通過元件掃描和自動裝配來實現 Spring 的自動化配置是更為推薦的方式,但有時候自動化配置的方案行不通,因此需要明確配置 Spring。比如說你想要將第三方庫中的元件裝配到你的應用中,在這種情況下,是沒辦法在它的類上新增 @Component 和 @Autowired 註解的,因此就不能使用自動化裝配的方案了。

1.建立配置類

@Configuration
public class CDPlayerConfig{

}

建立 JavaConfig 的關鍵在於為其新增 @Configuration 註解,此外,該類應該包含在 Spring 應用上下文中建立 bean 的細節。


2.宣告簡單的bean

要在 JavaConfig 中宣告 bean,我們需要編寫一個方法,這個方法會建立所需型別的例項,然後給這個方法新增 @Bean 註解,下面的程式碼聲明瞭 CompactDisc bean:

@Bean
public CompactDisc sgtPeppers(){
    return new SgtPeppers();
}

@Bean 註解會告訴 Spring 這個方法會返回一個物件,該物件需要註冊為 Spring 應用上下文中的 bean,方法體中包含了最終產生 bean 例項的邏輯。

預設情況下,bean 的 ID 與 帶有 @Bean 註解的方法名是一樣的。如果你想為其設定一個不同的名字的話,你可以重新命名該方法,或者通過 name 屬性指定一個不同的名字。如下:

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

3.藉助JavaConfig注入

由於JavaConfig 中直接包含了建立 bean 的方法,因此,在 JavaConfig 中注入 bean 只需要直接呼叫該方法即可。例如:

public void hello(){
    CDPlayer cdPlayer = new CDPlayer(sgtPeppers());
}

事實上,在 JavaConfig 中的方法理應是 bean 的生產者,如果遵循這個原則,上面的方法應該長這樣:

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

注意到,上例直接呼叫了 sgtPeppers() 方法,在上一小節中,我們已經定義了 sgtPeppers() 方法,並用 @Bean 註解修飾,此處與普通方法的呼叫有區別:正是因為在其上使用了 @Bean 註解,Spring 將會攔截所有對它的呼叫,確保直接返回該方法所建立的 bean ,而不是每次都對其進行實際的呼叫。