我很好奇Spring注入如何处理使用@Bean注释调用方法.如果我@Bean在一个方法上放一个注释,并返回一个实例,我明白这会告诉spring通过调用该方法并获取返回的实例来创建一个bean.但是,有时该bean必须用于连接其他bean或设置其他代码.这样做的通常方法是调用带@Bean注释的方法来获取实例.我的问题是,为什么这不会导致有多个bean浮动的实例?
例如,请参阅下面的代码(取自另一个问题).该entryPoint()方法用注释@Bean,所以我想春天会创建BasicAuthenticationEntryPoint一个bean 的新实例.然后,我们entryPoint()再次在configure块中调用,但它似乎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();
}
Run Code Online (Sandbox Code Playgroud)