Jestem ciekawy, jak wtrysk sprężyny obsługuje wywoływanie metod z @Bean
adnotacją. Jeśli umieszczę @Bean
adnotację w metodzie i zwrócę instancję, rozumiem, że to mówi spring o utworzeniu fasoli przez wywołanie metody i pobranie zwróconej instancji. Jednak czasami ta fasola musi być używana do łączenia innych ziaren lub ustawiania innego kodu. Zwykłym sposobem jest to wywołanie @Bean
metody z adnotacjami w celu pobrania instancji. Moje pytanie brzmi: dlaczego nie powoduje to unoszenia się wielu egzemplarzy fasoli?
Na przykład zobacz poniższy kod (zaczerpnięty z innego pytania). entryPoint()
Metoda jest opatrzone @Bean
, tak to sobie wyobrazić, wiosna będzie utworzyć nową instancję BasicAuthenticationEntryPoint
jako fasoli. Następnie entryPoint()
ponownie wywołujemy w bloku konfiguracji, ale wygląda na to, że entryPoint()
zwraca instancję bean i nie jest wywoływana wiele razy (próbowałem rejestrować i otrzymałem tylko jeden wpis w dzienniku). Potencjalnie moglibyśmy wywołać entryPoint()
wiele razy w innych częściach konfiguracji i zawsze otrzymalibyśmy tę samą instancję. Czy moje rozumienie tego jest prawidłowe? Czy wiosna w jakiś magiczny sposób przepisuje metody z adnotacjami @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
i@Primary
).