Ich bin gespannt, wie die Federeinspritzung mit der @Bean
Annotation aufruft . Wenn ich @Bean
einer Methode eine Annotation hinzufüge und eine Instanz zurückgebe, muss Spring eine Bean erstellen, indem die Methode aufgerufen und die zurückgegebene Instanz abgerufen wird. Manchmal muss diese Bean jedoch verwendet werden, um andere Beans zu verkabeln oder anderen Code einzurichten. Die übliche Vorgehensweise besteht darin, die mit @Bean
Anmerkungen versehene Methode aufzurufen , um eine Instanz abzurufen. Meine Frage ist, warum dies nicht dazu führt, dass mehrere Instanzen der Bean herumschweben.
Siehe zum Beispiel den folgenden Code (entnommen aus einer anderen Frage). Die entryPoint()
Methode ist mit Anmerkungen versehen @Bean
, daher würde ich mir vorstellen, dass der Frühling eine neue Instanz BasicAuthenticationEntryPoint
als Bohne erstellen wird . Dann rufen wir entryPoint()
den Konfigurationsblock erneut auf, aber es scheint, als würde entryPoint()
die Bean-Instanz zurückgegeben und nicht mehrmals aufgerufen (ich habe versucht, mich zu protokollieren, und habe nur einen Protokolleintrag erhalten). Möglicherweise könnten wir entryPoint()
in anderen Teilen der Konfiguration mehrmals aufrufen , und wir würden immer dieselbe Instanz erhalten. Ist mein Verständnis davon richtig? Führt der Frühling eine magische Umschreibung der mit Anmerkungen versehenen Methoden durch @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
und kommentiere@Primary
).