2014-03-07 44 views
2

我對Spring中的一些東西感到困惑。何時使用@Bean而不是@Component?

首先,我想在@Configuration類的一個顯式@Configuration類上使用@Bean作爲@Component的時候?

我能想到使用@Component的唯一原因是爲了自己在@Configuration類中創建一個@Bean方法。還有其他原因嗎?

這就是說,如果我使用的是@Configuration類,我似乎可以手動編寫這些bean的接線代碼。 IOW,我在@Component上使用@Inject我現在可以在@Bean構造函數中明確指定依賴項(當我在我的bean方法中創建它時)。那麼我什麼時候想要使用@Inject?我覺得我要在這裏下到一個兔子洞。

是否有任何優秀的教程或博客涵蓋了做出這些決策的最佳實踐或規則?

感謝

+0

請檢查以下問題:http://stackoverflow.com/questions/10604298/spring-component-versus-bean –

+0

是的,這個問題實際上激起了我的興趣。如果那是真的,爲什麼要使用Bean over Component。這是什麼讓我回到上面的問題。 –

回答

7

一個例子:

@Component 
public class SomeComponent { } 

上面會在實踐中創造的一樣:

public class SomeComponent { } 
@Configuration 
public class SomeComponentConfig { 
    @Bean 
    public SomeComponent someComponent() { 
     return new SomeComponent(); 
    } 
} 

@Component的優點是顯而易見的:它是更少的代碼!

另一方面,@Bean功能強大,有很多用例;例如,如果SomeComponent位於您無法編輯的現有庫中,或者您不希望將其與Spring或@Inject註釋混淆在一起。

+0

另一件需要記住的事情是,將需要特定配置的東西保存爲\ @Bean是很好的做法。例如,定義一個redis主機或數據庫憑證。這使您可以在配置類中更改每個實例的東西。如果它沒有每個實例的配置,你可以創建一個\ @Component(或者@ @Named)。 –

相關問題