Aufruf einer @Bean-Annotationsmethode in der Spring-Java-Konfiguration
Ich bin neugierig, wie spring-injection-Griffe aufrufen von Methoden mit der @Bean
annotation. Wenn ich ein @Bean
annotation an einer Methode, und die Instanz zurück, dass ich Sie verstehe, sagt Frühling zum erstellen einer bean durch Aufruf der Methode und die zurückgegebene Instanz. Manchmal jedoch, die Bohnen werden verwendet, um den Draht, der andere Bohnen oder anderen setup-code. Der übliche Weg diese erfolgt ist, rufen Sie die @Bean
annotierten Methode um eine Instanz zu erhalten. Meine Frage ist, warum nicht dieser Ursache es werden mehrere Instanzen der bean im Umlauf?
Beispielsweise finden Sie den code unten ein (entnommen aus einer anderen Frage). Die entryPoint()
Methode ist annotiert mit @Bean
, also ich könnte mir vorstellen das Frühjahr wird eine neue Instanz erstellen BasicAuthenticationEntryPoint
wie eine Bohne. Dann nennen wir entryPoint()
wieder in den block konfigurieren, aber es scheint, wie entryPoint()
gibt die bean-Instanz, und nicht mehrfach aufgerufen wird (ich habe versucht, die Protokollierung, und habe nur eine log-Eintrag). Potenziell könnten wir nennen entryPoint()
mehrere Male in anderen Teile der Konfiguration, und wir würden immer die gleiche Instanz. Ist mein Verständnis von diesem richtig? Hat Frühjahr einige Magische umschreiben von Methoden, annotiert mit @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();
}
InformationsquelleAutor der Frage markwatson | 2015-01-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, der Frühling hat einige Magie. Überprüfen Sie die Frühjahr Docs:
Dies bedeutet, dass Ihre Anrufe zu
@Bean
Methoden werden umgeleitet über CGLIB und deshalb ist die zwischengespeicherte version der bean zurück (eine neue wird nicht erstellt).Den Standard-Umfang der
@Bean
s istSINGLETON
, wenn Sie einen anderen Bereich angeben, wiePROTOTYPE
der Anruf wird weitergeleitet, um die original-Methode.InformationsquelleAutor der Antwort wassgren