Spring:通过私有方法注册bean

时间:2017-02-17 20:50:28

标签: java spring spring-mvc

我正在配置弹簧安全性,下面是我的代码 -

@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'在容器中,这是预期的。

但是当我在{ - 1}}上申请时 -

@Autowire

没有例外吗?这个@Override @Autowire protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(customUserDetailsService).passwordEncoder(encoder); } bean在bean工厂中的表现如何?

当我用这样的私有方法改变我的bean注册时 -

AuthenticationManagerBuilder

这是抛出异常,方法不能私有。为什么?

1 个答案:

答案 0 :(得分:1)

来自Spring文档

  

通常,@ Node方法在@Configuration类中声明。在这种情况下,bean方法可以通过直接调用它们来引用同一个类中的其他@Bean方法。这可确保bean之间的引用是强类型和可导航的。这种所谓的“bean间引用”保证尊重范围和AOP语义,就像getBean()查找一样。这些是从最初的“Spring JavaConfig”项目中已知的语义,它需要在运行时对每个这样的配置类进行CGLIB子类化。因此,在此模式下,不得将@Configuration类及其工厂方法标记为final或private

Ref link