Jestem ciekawa, w jaki sposób wtrysk sprężynowy obsługuje metody wywoływania z adnotacją @Bean
. Jeśli wstawię adnotację @Bean
dla metody i zwrócę instancję, rozumiem, że to mówi sprężynie, aby utworzyć komponent bean, wywołując metodę i pobierając zwróconą instancję. Czasami jednak ta fasola musi być użyta do podłączenia innych ziaren lub ustawienia innego kodu. Najczęstszym sposobem jest wywołanie metody o adnotacji @Bean
, aby uzyskać instancję. Moje pytanie brzmi: dlaczego to nie powoduje, że wiele kuli się unosi?Wywołanie metody z adnotacją @Bean w konfiguracji Spring java
Na przykład zobacz poniższy kod (wzięty z innego pytania). Metoda entryPoint()
jest opisana przez @Bean
, więc wyobrażam sobie, że wiosna stworzy nowe wystąpienie BasicAuthenticationEntryPoint
jako komponentu bean. Następnie ponownie wywołujemy entryPoint()
w bloku konfiguracyjnym, ale wygląda na to, że entryPoint()
zwraca instancję komponentu bean i nie jest wywoływana wiele razy (próbowałem się zalogować i otrzymałem tylko jeden wpis dziennika). Potencjalnie moglibyśmy wielokrotnie wywoływać entryPoint()
w innych częściach konfiguracji, a my zawsze otrzymalibyśmy to samo wystąpienie. Czy moje zrozumienie tego jest poprawne? Czy wiosna pozwala na magiczne przepisanie metod opisanych w @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();
}
Czy można zastąpić fasolę utworzoną w ten sposób? Na przykład mam klasy zdefiniowanej Spring, który bezpośrednio wywołuje metodę tworzenia bean. Czego chcę, to to, że nie używa się fasoli stworzonej przez tę metodę, ale definiuję siebie (poprzez adnotację jej za pomocą '@ Bean' i' @ Primary'). – Fons