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

Schreibe einen Kommentar