2017-06-03 2 views
0

Ich lese über die Komponente Scan und wie ich verstanden habe, dass Konfiguration Klassen automatisch gescannt werden. meine Frage, ob ich die folgenden Voraussetzungen erfüllt sein:Spring @Bean wird es autowired werden, wenn die Klasse automatisch gescannt

@Configuration 
public class AppConfig { 
@Bean(name="authenticationService") 
    public AuthenticationService getAuthenticationService(){ 
     return new AuthenticationService(); 
    } 
} 

wenn die @Configuration bereits (so die App Config verfügbar sein wird) abgetastet wird, wäre nicht die Bohne im Innern geschaffen? Ich bin etwas verwirrt, da sie sagen, dass der @Bean nicht automatisch gescannt wird.

+0

Nein, wird es nicht. Wenn Spring die Bean von AuthenticationService in AppConfig erstellen soll, verwenden Sie einfach @Autowired. '@Autowired private AuthenticationService authenticationService;' – harshavmb

+0

Die Antwort auf Ihre Frage ist nein, es wird '@ Bean' Methoden nicht scannen, da es nichts zu scannen gibt. Aber die Antwort, die Sie wollen, ist ja, eine Instanz von 'AuthenticationService' wird erstellt, weil das der einzige Punkt ist, an dem Sie eine '@ Bean'-Methode haben. So werden keine '@ Bean' nicht gescannt, sie zeigen lediglich die Bean-Erzeugungsmethoden an. Genau wie das '' Element in XML. –

+0

Danke für die Antwort, also wird die Bean erstellt sobald die Klasse automatisch gescannt wird oder? –

Antwort

-1

Nein. Spring scannt nicht @Bean Methoden.

Hier erstellen Sie die Bean AuthenticationService wie in jedem anderen Java-Programm mit new Schlüsselwort.

Es ist die gleiche wie AuthenticationService authenticationService = new AuthenticationService();

Wenn Sie Frühjahr wollen eine Bohne von AuthenticationService in AppConfig Klasse zu erstellen, verwenden Sie @Autowired Anmerkung

@Autowired 
private AuthenticationService authenticationService; 

hoffe, das hilft!

EDIT:

@ M.Deinum korrigiert mich, dass der Frühling schafft keine Bohnen basierend auf @Autowired Anmerkung. Bohnen werden automatisch im Frühling erzeugt, wenn ihre Klassen mit @ Component/@Configuration/@Service Annotationen versehen sind.

@ M.Deinum, Danke.

+0

Meine Hauptfrage wird diese Bohne durch automatisches Scannen gesehen werden? Da @Bean nicht vom Komponentenscan erkannt wird. Wenn es nicht erkannt wird, wie es Zahlen –

+0

Nein wird es nicht. '@ Autowired' erzeugt nichts, es ist nur ein Marker/Trigger, dass etwas von diesem Typ injiziert werden soll. Dieser Typ muss entweder Komponente gescannt und selbst mit '@ Component' versehen oder in einer' @ Configuration' Klasse mit einer '@ Bean' Methode erstellt werden (oder dem Äquivalent in XML ''. –

+0

@ M.Deinum, hinzugefügt haben "Zusammenfassend lässt sich sagen, dass Spring nur die mit" @Autowired Annotation "markierten Beans erzeugt. Ist das eine falsche Aussage? Ich weiß, dass Anmerkungen nichts außer dem Metadaten-Teil machen. Bitte korrigieren Sie mich, wenn mein Verständnis falsch ist. – harshavmb

Verwandte Themen