Frage

Ich weiß, dass es noch nicht ganz beliebt ist, da die Spezifikation vor wenigen Monaten veröffentlicht wurde.

Ich habe noch nicht "installiert", ich lese nur und auf diese Frage möchte ich sicherstellen, dass ich diesen wichtigen Punkt richtig verstanden habe:

Ist die Auflösung von Bohnen, die in Gläser mit dritten Parteien sind, die sie als deklarieren <alternatives> in deiner beans.xml?

Wenn nicht, wie man Bohnen von Bibliotheken von Drittanbietern verwendet, die nicht haben beans.xml ?

Wenn Sie das Glas auf den Klassenpfad legen beans.xml in ihren META-INF, was Sie für Drittanbietergläser nicht wahr machen können. (sehen Gavin Kings Posten zu diesem Thema)

War es hilfreich?

Lösung

Warum so kompliziert denken?

Machen Sie einfach ein Producterthod für diese Drittanbieterklassen.

Angenommen

private @Inject PdfFaxService faxService;

In Ihrem Code können Sie dies einfach mit einer Produzentenmethode zur Verfügung stellen. Der pdffaxService funktioniert staatenlos, sodass wir sicher davon ausgehen können, dass wir es schaffen können @ApplicationScoped:

public @Produces @ApplicationScoped PdfFaxService createFaxService() {
  return new PdfFaxService(initparameters);
}

irgendwo.

HTH.

Andere Tipps

Mein Verständnis von einem Alternative Ist es eine Alternative zu einer anderen Implementierung einer Schnittstelle, die Sie in einer anderen Bereitstellungsumgebung verwenden können (z. B. eine Testumgebung). Ein Alternative Bean wird erklärt, indem es mit Annotation mit Annotation mit @Alternative.

Um eine Alternative in einem bestimmten Bereitstellungsszenario zu verwenden, wählen Sie sie in der aus <alternatives> Element Ihres CDI -Bereitstellungsdeskriptors META-INF/beans.xml. Dies wird ermöglichen @Alternative Bohnen, die standardmäßig deaktiviert sind.

Wenn der Behälter für einen bestimmten Injektionspunkt eine mehrdeutige Abhängigkeit findet, wird die injizierte Alternativen untersucht und, wenn es genau einen gibt, diese Alternative aufnehmen.

Mit anderen Worten, Alternativen sind eine schöne Möglichkeit, eine zu ersetzen Bestehende Implementierung mit einem anderen zur Bereitstellungszeit. Wenn nichts ersetzt zu werden gibt, brauchen Sie keine Alternativen. Setzen Sie einfach Ihr Glas auf den Klassenpfad. Ich bin mir jedoch nicht sicher, ob dies genau Ihre Frage war, ich habe Zweifel an dem Konzept der Drittanbieter.

Mehr in 2.1.4. Alternativen, 4.6. Alternativen und 4.7. Unzufriedene und mehrdeutige Abhängigkeiten beheben (Aber ich denke, das ist das, was Sie lesen).

Aktualisieren: Um Ihre zusätzliche Frage zu beantworten.

Wenn nicht, wie man Bohnen von Drittanbieterbibliotheken verwendet, die keine Beans.xml haben

Dies kann nicht passieren, ein Bohnenarchiv muss eine haben bean.xml (sei es leer), wie im Abschnitt beschrieben 15.6. Verpackung und Bereitstellung der Dokumentation:

CDI definiert kein spezielles Bereitstellungsarchiv. Sie können Bohnen in Gläser, EJB-Jars oder Kriege verpacken-jeder Einsatzort im Anwendungsklassenpfad. Allerdings das Archiv mussSei ein "Bohnenarchiv". Das bedeutet, dass jedes Archiv, das Bohnen enthält beans.xml in dem META-INF Verzeichnis des Klassenpfads oder WEB-INF Verzeichnis der Web Root (für Kriegsarchive). Die Datei kann leer sein. Bohnen, die in Archiven eingesetzt werden, die keine haben beans.xml Die Datei steht nicht zur Verwendung in der Anwendung zur Verfügung.

Um eine unbefriedigte und mehrdeutige Abhängigkeit zu beheben, lesen Sie den zuvor erwähnten Abschnitt 4.7.

Update 2: Es scheint, dass die Verwendung BeforeBeanDiscovery.addAnnotatedType() Es ist möglich, andere Klassen hinzuzufügen, die während der Bean -Entdeckung berücksichtigt werden sollen. (BeforeBeanDiscovery ist eine Veranstaltung)

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