wake-up-neo.net

Sowohl @Component als auch @Named für dieselbe Bean-Klasse

Benötigt eine Klasse, die in einer Spring-Anwendung als Bean fungiert, gleichzeitig @Component und @Named?

Was ist die Bedeutung, wenn beide so verwendet werden?

Ich habe versucht, im Internet zu suchen, habe die Standarddokumentation dieser Anmerkungen gesehen und sie etwas verwirrend gefunden.

Welchen Namen nimmt die Anwendung schließlich an, wenn die Annotation @Named keinen Namen für die Bean angibt?

26
TechSpellBound

@Component und @Named sind Annotationen, die im Grunde dasselbe tun, aber von verschiedenen APIs stammen.

@Component gehört zur Spring API. Es kennzeichnet eine Klasse, die automatisch als Bean erkannt wird, und ermöglicht optional die Angabe eines Namens für diese Bean (@Component("foo")). Ohne explizite Namensangabe erhält das Bean einen Standardnamen, der vom Namen seiner Klasse abgeleitet wird.

@Named gehört zu javax.inject API. Es kennzeichnet eine Klasse, die automatisch als Bean erkannt wird, und erfordert, dass Sie einen Namen angeben.

Spring unterstützt beide APIs. Es ist nicht sinnvoll, beide Anmerkungen in derselben Klasse zu verwenden, da sie die gleiche Funktionalität bieten.

Siehe auch:

52
axtavt

Spring unterstützt @Named Annotation (JSR-330) als Alternative zu @Component (Spring). 

Im Allgemeinen wird @Named schlecht benannt, da er nicht beschreibt, was er tut. Daher würde ich @Component vorziehen, wann immer ich kann.

6
MagGGG

Beides sollte verwendet werden . Die Verwendung von @Component und @Named ergibt keinen Sinn . Hinzufügen des obigen Kommentars (Other) @Component ("[someComponentID]") und @Named ("[ someNamedID] "), um einer Bean eine ID zuzuweisen, indem die ID in Klammern übergeben wird, falls nicht implizit eine ID zugewiesen wurde.