Vielleicht sind es einfach zu viele Stunden, in denen ich das Internet durchforstet habe. CDI 1.0 Spezifikation aber ich konnte keine detaillierte Beschreibung finden, wo genau ein META-INF/beans.xml
erforderlich war.
(Die Abschnitt über die Entdeckung der Bohne macht ein paar verlockende Aussagen, die bestimmte Dinge andeuten, aber ich bin mir nicht sicher, ob sie vorschreibend sind).
Soweit ich weiß, braucht jedes Bohnenarchiv ein solches.
Aber betrachten Sie einen Fall mit den folgenden Gläsern in einer CDI 1.0-konformen Umgebung:
- Eine Schnittstelle jar die nur Schnittstellen enthalten
- Eine Implementationstopf die CDI-Beans enthalten, die diese Schnittstellen implementieren und die Funktion
@Inject
Injektionsstellen, aber keine Erzeugermethoden - A Erzeugergefäß enthält (der Einfachheit halber) ein einzelnes Java-Objekt mit einer einzigen Methode, die mit
@Produces
.
Es erscheint logisch, dass sowohl die Erzeugergefäß und die Implementationstopf müssten Bohnenarchive sein, und somit müsste jedes META-INF/beans.xml
die in ihnen enthaltenen Ressourcen.
Aber nur der Vollständigkeit halber: Ist dies tatsächlich der Fall? Da die Implementationstopf verwendet nur eine @Inject
Punkt und keine CDI-Anmerkungen, würde er auf andere Weise gescannt werden? Man kann es auch anders sehen: In diesem Beispiel ist der Implementationstopf verwendet wird sólo als die Ziel für Injektionen, nicht die Quelle von Injektionsmitteln. Ich könnte mir also eine gewisse Logik vorstellen, die besagt: Seht her, nur Gläser, die Bohnen produzieren, die kann injiziert werden müssen als Bean-Archive deklariert werden. (Ich behaupte nicht, dass das wahr ist; ich kann mir nur vorstellen, dass dieses Argument vorgebracht wird).
Und schließlich ist da noch die ganze Frage der Schnittstelle jar . Per Definition enthält es keine Bohnen, aber ich habe vor langer Zeit Fälle mit GlassFish gesehen, in denen sogar die Schnittstelle jar musste eine META-INF/beans.xml
Datei enthalten. Das scheint mir falsch zu sein, aber zu meiner Überraschung konnte ich in der Spezifikation keinen Abschnitt finden, der dies bestätigt oder verneint.
Also: beans.xml
überall? Nur in Gläsern, die Injektionsmaterial produzieren? Nur in Gläsern für Injektionszwecke? Oder...?