@Bean和@Component之間的區別?

banq發表於2018-12-03

@Bean和@Component都是將Spring Bean新增到Spring Context中。結果是一樣的。有什麼不同?

@Bean
@Bean與配置類(使用@Configuration)一起工作,因此使用在基於配置中。也可用在配置類的方法中。告訴Spring將方法返回的任何內容新增到Spring Context中。
預設情況下,它將使用方法的名稱作為bean的id / name(類似XML配置:bean id=xxxx)。另一種方法是,您可以在@Bean註釋中指定它。

我們明確宣告瞭bean。

@Component
@Component用於我們的類,它只有在我們的SpringBoot應用程式啟用了元件掃描並且包含了我們的類時才有效。
透過元件掃描,Spring將掃描整個類路徑,並將所有@Component註釋類新增到Spring Context(具有可調整的Filtering)。

我們讓Spring發現了bean

區別
兩個註釋的結果是相同的,bean都會被新增到Spring上下文中。但是,有一些問題需要注意。

假設我們有一個需要在多個應用程式中共享的模組,這個模組包含了一些服務,但並非所有應用都需要這些服務。
如果在這些服務類上使用@Component並在應用程式中使用元件掃描,我們最終可能會檢測到超過必要的bean數量,不不需要的Bean也掃描載入了。這時候必須調整元件掃描的過濾或提供即使未使用的bean也可以執行的配置,否則,Spring應用程式上下文將無法啟動。
在這種情況下,最好使用@Bean註釋並僅例項化那些在每個應用程式中單獨需要的bean。
 

相關文章