Wofür soll die Annotation javax.inject.Named verwendet werden?
Lesezeit: 4 Minuten
ams
Ich versuche das zu verstehen javax.inject Paket und mir ist nicht klar, was das ist javax.inject.Named Annotation soll verwendet werden. Das Javadoc erklärt nicht die Idee dahinter.
ich benutze Frühling 3.0 um einige Beispielprogramme zu schreiben, indem Sie @Named Bei einer Bean scheint es der Bean-Factory hinzugefügt zu werden, aber die Javadoc-Beschreibung ist so leicht, dass ich nicht sagen kann, ob dies das Standardverhalten oder das Spring-spezifische Verhalten ist.
Meine Fragen sind:
Was ist der Unterschied zwischen @Named und @Qualifier
Wie sollen Sie dem Laufzeitsystem mitteilen, dass eine Klasse in andere Klassen injizierbar sein soll, was ist die Anmerkung dafür? Das Äquivalent von @Component im Frühling?
Aktualisierung 1 Es gibt eine ausgezeichnete Erklärung von @Named und @Qualifier bei Schöner Artikel über @Named und @Qualifierhttps://dzone.com/articles/java-ee6-cdi-named-components danke @xmedeko für die Verlinkung des Kommentars unten.
Die Konfiguration von JSR-330 ist außerhalb der Spezifikation, dh containerspezifisch.
– Thorbjørn Ravn Andersen
24. März 2011 um 7:13 Uhr
Laut den Spring-Dokumenten “kann die @Named-Annotation von JSR 330 als Mittel verwendet werden, um sowohl Komponenten zu erkennen als auch ihnen einen Namen zu geben. Dieses Verhalten wird automatisch aktiviert, wenn Sie die JSR 330-JAR im Klassenpfad haben.” ist dieses Verhalten einzigartig für Spring oder für alle Container, die @Named verstehen?
– ams
24. März 2011 um 8:24 Uhr
Brücken
Verwenden @Named zu unterscheiden zwischen verschiedenen Objekten des gleichen Typs, die im gleichen Geltungsbereich gebunden sind.
@Named("maxWaitTime")
public long maxWaitTimeMs;
@Named("minWaitTime")
public long minWaitTimeMs;
Ohne das @Named Qualifizierer, würde der Injektor nicht wissen, welche Länge an welche Variable zu binden ist.
Wenn Sie Anmerkungen erstellen möchten, die sich wie verhalten @Namedverwenden Sie die @Qualifier Anmerkung beim Erstellen.
Wenn Sie sich ansehen @Namedes ist selbst mit annotiert @Qualifier.
@Named ist also wirklich @Qualifier, warum muss @Qualifier also so generisch sein, ist die Idee, jemandem, der javax.inject verwendet, zu erlauben, Stereotypen wie @Repository,@Service,@Controller zu definieren, die als @Qualifier gekennzeichnet sind?
– ams
24. März 2011 um 6:09 Uhr
Ich bin mir nicht sicher, was du mit Stereotypen meinst. Wenn Sie das Hinzufügen neuer Anmerkungen meinen, um zwischen verschiedenen Instanzen desselben Typs zu unterscheiden, dann ja.
– Brücken
24. März 2011 um 12:49 Uhr
Anstelle von @Named(“maxWaitTime”) könnten Sie beispielsweise @MaxWaitTime verwenden. Es ist nur etwas sauberer.
Ich verstehe nicht … können Sie den Unterschied zwischen ihnen nicht anhand ihrer unterschiedlichen Variablennamen erkennen?
– CodyBugstein
11. Mai 2014 um 17:40 Uhr
Nadav Finish
@Inject statt Springs @Autowired eine Bohne zu injizieren. @Named statt Springs @Component eine Bohne zu deklarieren.
Diese JSR-330 Standardanmerkungen werden auf die gleiche Weise gescannt und abgerufen wie Spring-Anmerkungen (sofern die folgenden jar ist in deinem Klassenpfad)
Der Ausdruck “eine Bohne injizieren” ist mehrdeutig; meinst du “alle Abhängigkeiten dieser Bohne erfüllen” oder meinst du “diese Bohne in etwas injizieren, das sie als Abhängigkeit hat”?
– Andreas Schwan
26. April 2016 um 23:49 Uhr
Wo finde ich eine Liste von JSR-Gegenstücken zu Federanmerkungen?
– Pfau
4. Mai 2017 um 7:16 Uhr
inject a bean – “injizieren Sie diese Bohne in etwas, das sie als Abhängigkeit hat”
– Nadav Finish
8. Mai 2017 um 19:38 Uhr
Es tut mir leid, Pawan, ich bin nicht mit einer Liste von JSR vertraut, die der Federanmerkung entsprechen
– Nadav Finish
8. Mai 2017 um 19:43 Uhr
Zu Nr. 2 gemäß der JSR-330-Spezifikation:
Dieses Paket stellt Anmerkungen zur Abhängigkeitsinjektion bereit, die portable Klassen ermöglichen, aber es überlässt die externe Abhängigkeitskonfiguration der Injektorimplementierung.
Es ist also Sache des Anbieters zu bestimmen, welche Objekte für die Injektion verfügbar sind. Im Fall von Spring sind es nur Frühlingsbohnen. Und jede mit JSR-330-Annotationen kommentierte Klasse wird automatisch als Spring-Beans hinzugefügt, wenn ein AnnotationConfigApplicationContext verwendet wird.
abbas
Die Hauptaufgabe der Annotation @Named besteht darin, eine Bean zu definieren, um EL-Anweisungen innerhalb der Anwendung aufzulösen, normalerweise durch JSF-EL-Resolver. Die Injektion kann mit Namen durchgeführt werden, aber so sollte die Injektion in CDI nicht funktionieren, da CDI uns eine viel reichhaltigere Möglichkeit bietet, Injektionspunkte und die in sie zu injizierenden Bohnen auszudrücken.
13346500cookie-checkWofür soll die Annotation javax.inject.Named verwendet werden?yes
Die Konfiguration von JSR-330 ist außerhalb der Spezifikation, dh containerspezifisch.
– Thorbjørn Ravn Andersen
24. März 2011 um 7:13 Uhr
Laut den Spring-Dokumenten “kann die @Named-Annotation von JSR 330 als Mittel verwendet werden, um sowohl Komponenten zu erkennen als auch ihnen einen Namen zu geben. Dieses Verhalten wird automatisch aktiviert, wenn Sie die JSR 330-JAR im Klassenpfad haben.” ist dieses Verhalten einzigartig für Spring oder für alle Container, die @Named verstehen?
– ams
24. März 2011 um 8:24 Uhr