Je suis curieux de savoir comment l'injection de ressort gère les méthodes d'appel avec l' @Bean
annotation. Si je mets une @Bean
annotation sur une méthode et renvoie une instance, je comprends que cela indique à spring de créer un bean en appelant la méthode et en obtenant l'instance retournée. Cependant, parfois, ce bean doit être utilisé pour câbler d'autres beans ou configurer un autre code. La manière habituelle de procéder consiste à appeler la @Bean
méthode annotée pour obtenir une instance. Ma question est la suivante: pourquoi cela ne cause-t-il pas plusieurs instances du haricot flottant?
Par exemple, consultez le code ci-dessous (tiré d'une autre question). La entryPoint()
méthode est annotée avec @Bean
, donc j'imagine que Spring créera une nouvelle instance de en BasicAuthenticationEntryPoint
tant que bean. Ensuite, nous appelons à entryPoint()
nouveau dans le bloc de configuration, mais il semble que cela entryPoint()
renvoie l'instance du bean et ne soit pas appelée plusieurs fois (j'ai essayé de se connecter et je n'ai obtenu qu'une seule entrée de journal). Potentiellement, nous pourrions appeler entryPoint()
plusieurs fois dans d'autres parties de la configuration, et nous obtiendrions toujours la même instance. Est-ce que ma compréhension de cela est correcte? Spring fait-il une réécriture magique des méthodes annotées avec @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
et@Primary
).