Ich versuche, das javax.inject
Paket zu verstehen , und mir ist nicht klar, wofür die javax.inject.Named
Anmerkung verwendet werden soll. Der Javadoc erklärt die Idee dahinter nicht.
Javadoc finden Sie unter http://download.oracle.com/javaee/6/api/javax/inject/Named.html
Ich verwende Spring 3.0 , um einige Beispielprogramme zu schreiben. @Named
Wenn ich eine Bean anlege, scheint sie 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 Runtime-System mitteilen, dass eine Klasse in andere Klassen injizierbar sein soll? Wie lautet die Anmerkung dazu? Das Äquivalent von
@Component
im Frühling?
Update 1 gibt es eine ausgezeichnete Erklärung von @Named
und @Qualifier
in Nizza Artikel über @Named
und @Qualifier
https://dzone.com/articles/java-ee6-cdi-named-components danke @xmedeko für die Verknüpfung mit dem Kommentar unten.
Antworten:
Verwenden Sie
@Named
diese Option, um zwischen verschiedenen Objekten desselben Typs zu unterscheiden, die im selben Bereich gebunden sind.Ohne das
@Named
Qualifikationsmerkmal würde der Injektor nicht wissen, wie lange er an welche Variable binden soll.Wenn Sie Anmerkungen erstellen möchten, die sich wie folgt verhalten
@Named
, verwenden Sie die@Qualifier
Anmerkung beim Erstellen.Wenn Sie sich das ansehen
@Named
, ist es selbst mit Anmerkungen versehen@Qualifier
.quelle
@Named
und@Qualifier
java.dzone.com/articles/java-ee6-cdi-named-components@Inject
anstelle von Spring's@Autowired
, um eine Bohne zu injizieren.@Named
anstelle von Spring's@Component
eine Bohne deklarieren.Diese JSR-330- Standardanmerkungen werden auf dieselbe Weise wie die Spring-Annotation gescannt und abgerufen (sofern sich Folgendes
jar
in Ihrem Klassenpfad befindet).quelle
In Bezug auf # 2 gemäß der JSR-330-Spezifikation:
Es ist also Sache des Anbieters, zu bestimmen, welche Objekte zur Injektion verfügbar sind. Im Falle des Frühlings sind alles Frühlingsbohnen. Alle mit JSR-330-Annotationen kommentierten Klassen werden bei Verwendung eines AnnotationConfigApplicationContext automatisch als Spring Beans hinzugefügt.
quelle
Die Hauptaufgabe der Annotation @Named besteht darin, eine Bean zu definieren, um EL-Anweisungen innerhalb der Anwendung aufzulösen, normalerweise über JSF-EL-Resolver. Die Injektion kann unter Verwendung von Namen durchgeführt werden, aber so sollte die Injektion in CDI nicht funktionieren, da CDI uns eine viel umfassendere Möglichkeit bietet, Injektionspunkte und die in sie zu injizierenden Bohnen auszudrücken.
quelle