我希望Spring以给定的顺序注入Bean。我在下面的代码中遇到了一个奇怪的问题。 setAuthenticationProvider()
和configureAuthManager()
方法均以随机顺序注入。如果首先注入configureAuthManager()
,则在登录过程中会得到一个NPE。否则,它将运行良好。
所以我想强迫Spring保持秩序。我尝试用setAuthenticationProvider
来注释Order(1)
,而用Order(2)
来注释-没帮助(为什么?)。然后,我也尝试使用@DependsOn
注释,但是它也不能解决我的问题。
@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
private AuthenticationProvider authenticationProvider;
// @Order(1) - does not help
@Autowired
@Qualifier("daoAuthenticationProvider")
public void setAuthenticationProvider(AuthenticationProvider authenticationProvider) {
System.out.println("1");
this.authenticationProvider = authenticationProvider;
}
// @Order(2) - does not help
// @DependsOn("daoAuthenticationProvider") - does not help either
@Autowired
public void configureAuthManager(AuthenticationManagerBuilder authenticationManagerBuilder) {
System.out.println("2");
authenticationManagerBuilder.authenticationProvider(authenticationProvider);
}
[...]
}
答案 0 :(得分:0)
bean创建的顺序无关紧要。如果您需要先注入依赖项,则可以调用任何一种方法
@Autowired
(如果创建bean,则使用@Bean
)。 无论哪种方式,Spring都可以弄清楚创建bean的顺序,以便在正确的时间满足所有依赖性。