Estou curioso para saber como a injeção de mola lida com métodos de chamada com a @Bean
anotação. Se eu colocar uma @Bean
anotação em um método e retornar uma instância, entendo que isso diz ao spring para criar um bean chamando o método e obtendo a instância retornada. No entanto, às vezes esse bean precisa ser usado para conectar outros beans ou configurar outro código. A maneira usual de fazer isso é chamar o @Bean
método anotado para obter uma instância. Minha pergunta é: por que isso não faz com que haja várias instâncias do bean flutuando?
Por exemplo, veja o código abaixo (retirado de outra questão). O entryPoint()
método é anotado com @Bean
, então eu imagino que o spring criará uma nova instância de BasicAuthenticationEntryPoint
as a bean. Em seguida, chamamos entryPoint()
novamente no bloco configure, mas parece que entryPoint()
retorna a instância do bean e não é chamado várias vezes (tentei fazer o log e só consegui uma entrada de log). Potencialmente, poderíamos chamar entryPoint()
várias vezes em outras partes da configuração e sempre obteríamos a mesma instância. Meu entendimento disso está correto? Spring faz alguma reescrita mágica de métodos anotados @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();
}
@Bean
e@Primary
).