如果类自动扫描,Spring @Bean是否会自动装入
我阅读了有关组件扫描的内容,并且据我了解,配置类是自动扫描的。我的问题,如果我有以下几点:如果类自动扫描,Spring @Bean是否会自动装入
@Configuration
public class AppConfig {
@Bean(name="authenticationService")
public AuthenticationService getAuthenticationService(){
return new AuthenticationService();
}
}
如果@Configuration已经扫描(所以应用程序配置将可用),不会是豆里面产生的?我有点困惑,因为他们说@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,谢谢。
我的主要问题将通过自动扫描看到bean?由于@Bean未被组件扫描发现。如果它没有检测到它是如何发现它 –
不,它不会。 '@ Autowired'什么都不创建,它只是一个标记/触发器,你需要注入某种类型的东西。该类型必须是组件扫描的,并且它本身使用“@ Component”进行了注释,或者使用“@ Bean”方法在“@ Configuration”类中创建(或者等效于XML'
@ M.Deinum,已添加总之,spring最终只会创建标有@Autowired annotation的bean,这是否是一个错误的陈述?我知道注释除了元数据部分什么也不做,如果我的理解错误,请纠正我的问题。 – harshavmb
不,它不会。如果你想Spring在AppConfig中创建AuthenticationService的bean,只需使用@Autowired。 '@Autowired private AuthenticationService authenticationService;' – harshavmb
你的问题的答案是否定的,它不会扫描'@ Bean'方法,因为没有什么可扫描的。但是你想要的答案是肯定的,将会创建一个'AuthenticationService'的实例,因为这是拥有'@ Bean'方法的关键。所以没有'@ Bean'不被扫描,它们只是表示bean的创建方法。就像XML中的' '元素一样。 –
感谢您的回复,所以一旦类自动扫描正确,bean将被创建? –