2015-09-05 81 views
0

我对Spring一般比较陌生,但已经通读了Apress Spring Rest文本并获得了在Eclipse中运行的示例没有任何问题。Spring Boot - 自动注入的单个实现类

在这些例子中令我感到困惑的是物体是如何自动注入的。 例如在第8章安全中有一个QuickPollUserDetailsService类,它实现了弹簧UserDetailsService类。

经文说以下内容:“该SecurityConfig类声明了一个userDetailsService财产,而它与在运行时QuickPollUserDetailsService实例注入”

@Configuration 
@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter 
{   
@Inject 
     private UserDetailsService userDetailsService;   
@Override 
     protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
       auth.userDetailsService(userDetailsService)      .passwordEncoder(new BCryptPasswordEncoder());   
}} 

无处在任何文件中没有规定QuickPollUserDetailsService将被设置。 Spring是否在这里很聪明,并且注意到QuickPollUserDetailsServiceUserDetailsService的唯一实现者,因此假设它必须被注入? 如果是这样的话如果我有2个或更多的实现者UserDetailsService

回答

1

默认情况下,Spring Boot将递归扫描包,可用的实现将被自动注入。如果有多个实现可用,启动将失败。

+0

为此欢呼 - 我看到@Qualifier注释可用于指定要使用哪个实现 –

相关问题