Jestem ciekawy, jak wtrysk sprężyny obsługuje wywoływanie metod z @Beanadnotacją. Jeśli umieszczę @Beanadnotację 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 @Beanmetody 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ę BasicAuthenticationEntryPointjako 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();
}
@Beani@Primary).