Frage

Ich habe mit der JSR-299 Referenzimplementierung „Weld“ mit dem Zweck der Verwendung in einer Stand-alone-Anwendung gespielt, und ich habe einen Blick auf der Dokumentation hat, und an der Magie verwunderte.

Meine Frage ist wie der Hersteller eines bestimmten Objekts @ Inject'ed zu finden ist?

Entweder der Java-Compiler erzeugt Hinweise für Anmerkungen, die leicht durch den Klassenlader gefunden wird, oder die komplette Classpath muss laden alle Klassen durchlaufen werden, um zu sehen, was sie tun, was mir sehr ineffizient klingt, oder es ist ein völlig anderer Ansatz.

Was ist der Trick?

War es hilfreich?

Lösung

Der Classpath ist für "bean-Archive" gescannt. Bean Archive sind die Bibliotheken, die META-INF/beans.xml enthalten. Alle Bohnen in diesen Archiven werden automatisch mit dem BeanManager registriert und ihre Anmerkungen werden analysiert und gespeichert. Jedes Mal, wenn ein Hersteller benötigt wird, der Bean-Manager wird über qualifizierte Hersteller konsultiert

Andere Tipps

Ich gehe davon aus, dass es das gleiche ist wie in Seam funktioniert: in dem der Classpath tatsächlich abgetastet wird. Die impl wird auch mit dem kleinsten passenden Rahmen für die @produce suchen, so können Sie zum Beispiel ein Erzeugnis auf Sitzungsebene für eingeloggte Benutzer und eine andere auf Anwendungsebene für anonyme Benutzer haben können.

Keine Ahnung, aber das @Inject teilweise durch Hibernate Vater getan wurde schließlich überarbeitet / am Ende von Springsource und Google beeinflusste. Vielleicht funktioniert es ein bisschen wie Guice?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top