2017-02-17 78 views
0

我配置Spring安全註冊豆,下面是我的代碼 -春:通過私有方法

@Override 
protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
    auth.userDetailsService(customUserDetailsService).passwordEncoder(encoder); 
} 

@Bean(name="encoder") 
public BCryptPasswordEncoder getPasswordEncoder(){ 
    return new BCryptPasswordEncoder(); 
} 

@Override 
protected void configure(HttpSecurity http) throws Exception { 
... 
} 

只要我申請@Autowire導通

@Override 
@Autowire 
    protected void configure(HttpSecurity http) throws Exception { 
    ... 
    } 

這引發異常無豆在容器中鍵入'HttpSecurity',這是預期的。

但是當我申請@Autowire導通

@Override 
@Autowire 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(customUserDetailsService).passwordEncoder(encoder); 
    } 

有沒有例外? 這個AuthenticationManagerBuilder這個bean是在bean factory嗎?

當我改變了我的豆登記私有方法像這個 -

@Override 
protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
    auth.userDetailsService(customUserDetailsService).passwordEncoder(getPasswordEncoder()); 
} 

@Bean(name="encoder") 
private BCryptPasswordEncoder getPasswordEncoder(){ 
    return new BCryptPasswordEncoder(); 
} 

這是拋出異常,方法不能是private.Why這樣呢?

+0

標記爲最終或私人你有兩個問題。後者應該是不言自明的。首先,你使用Boot嗎? – chrylis

+0

@chrylis這是spring mvc項目,Iam不在這裏使用spring boot。 – TheCurious

回答

0

從Spring文檔

通常,@Bean方法@Configuration類中聲明。在這種情況下,bean方法可以通過直接調用它們來引用同一類中的其他@Bean方法。這確保了bean之間的引用是強類型和可導航的。這種所謂的「bean間引用」保證像getBean()查找那樣尊重範圍檢查和AOP語義。這些是最初的'Spring JavaConfig'項目中已知的語義,它們需要在運行時對每個這樣的配置類進行CGLIB子類化。因此,@Configuration類和它們的工廠方法不能在此模式下

Ref link