2017-06-03 129 views
0

我閱讀了有關組件掃描的內容,並且據我瞭解,配置類是自動掃描的。我的問題,如果我有以下幾點:如果類自動掃描,Spring @Bean是否會自動裝入

@Configuration 
public class AppConfig { 
@Bean(name="authenticationService") 
    public AuthenticationService getAuthenticationService(){ 
     return new AuthenticationService(); 
    } 
} 

如果@Configuration已經掃描(所以應用程序配置將可用),不會是豆裏面產生的?我有點困惑,因爲他們說@Bean不是自動掃描的

+0

不,它不會。如果你想Spring在AppConfig中創建AuthenticationService的bean,只需使用@Autowired。 '@Autowired private AuthenticationService authenticationService;' – harshavmb

+0

你的問題的答案是否定的,它不會掃描'@ Bean'方法,因爲沒有什麼可掃描的。但是你想要的答案是肯定的,將會創建一個'AuthenticationService'的實例,因爲這是擁有'@ Bean'方法的關鍵。所以沒有'@ Bean'不被掃描,它們只是表示bean的創建方法。就像XML中的''元素一樣。 –

+0

感謝您的回覆,所以一旦類自動掃描正確,bean將被創建? –

回答

-1

編號Spring不會掃描@Bean方法。

在這裏,您正在創建AuthenticationService的bean,就像使用new關鍵字的任何其他java程序一樣。

是一樣AuthenticationService authenticationService = new AuthenticationService();

如果你想在春天類AppConfig創造AuthenticationService一個bean,使用@Autowired註釋

@Autowired 
private AuthenticationService authenticationService; 

希望這有助於!

編輯:

@ M.Deinum糾正我說,春天不會創建基於@Autowired註釋豆。如果Spring的類使用@Component/@Configuration/@Service註釋進行註釋,則Spring會自動創建bean。

@ M.Deinum,謝謝。

+0

我的主要問題將通過自動掃描看到bean?由於@Bean未被組件掃描發現。如果它沒有檢測到它是如何發現它 –

+0

不,它不會。 '@ Autowired'什麼都不創建,它只是一個標記/觸發器,你需要注入某種類型的東西。該類型必須是組件掃描的,並且它本身使用「@ Component」進行了註釋,或者使用「@ Bean」方法在「@ Configuration」類中創建(或者等效於XML''。 –

+0

@ M.Deinum,已添加總之,spring最終只會創建標有@Autowired annotation的bean,這是否是一個錯誤的陳述?我知道註釋除了元數據部分什麼也不做,如果我的理解錯誤,請糾正我的問題。 – harshavmb