【发布时间】:2015-03-15 10:01:54
【问题描述】:
我很好奇spring注入如何处理带有@Bean注解的调用方法。如果我在方法上添加@Bean 注释并返回一个实例,我知道这会告诉spring 通过调用该方法并获取返回的实例来创建一个bean。但是,有时该 bean 必须用于连接其他 bean 或设置其他代码。通常的做法是调用@Bean 带注释的方法来获取实例。我的问题是,为什么这不会导致 bean 出现多个实例?
例如,请参阅下面的代码(取自另一个问题)。 entryPoint() 方法用@Bean 注释,所以我想spring 会创建一个BasicAuthenticationEntryPoint 的新实例作为bean。然后,我们在配置块中再次调用entryPoint(),但似乎entryPoint() 返回了bean 实例,并且没有被多次调用(我尝试了日志记录,但只有一个日志条目)。可能我们可以在配置的其他部分多次调用entryPoint(),我们总是会得到相同的实例。我对此的理解正确吗? Spring 是否会对带有 @Bean 注释的方法进行一些神奇的重写?
@Bean
public BasicAuthenticationEntryPoint entryPoint() {
BasicAuthenticationEntryPoint basicAuthEntryPoint = new BasicAuthenticationEntryPoint();
basicAuthEntryPoint.setRealmName("My Realm");
return basicAuthEntryPoint;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.exceptionHandling()
.authenticationEntryPoint(entryPoint())
.and()
.authorizeUrls()
.anyRequest().authenticated()
.and()
.httpBasic();
}
【问题讨论】: