如果类自动扫描,Spring @Bean是否会自动装入

问题描述:

我阅读了有关组件扫描的内容,并且据我了解,配置类是自动扫描的。我的问题,如果我有以下几点:如果类自动扫描,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将被创建? –

编号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