Frage

Im Frühjahr war es möglich, jede Klasse zu instanziiert durch die entsprechende Bean in xml conf definieren. Es war auch möglich, mehr als eine Bohne für die gleiche Klasse zu instanziiert mit unterschiedlichen Parametern .....

Sind die solche Merkmale in CDI als auch, und zwar ist es möglich, verschiedene Instanzen der gleichen Klasse mit verschiedenen Initialisierungsparameter erstellen?

Ist es auch möglich, eine Bohne zu erstellen, ohne die Klasse zu ändern .... Ich meine ohne Anmerkung hinzufügen?

ADDED

Lassen Sie mich ein Beispiel zu machen.

<bean id="someBean1" class="org.mm.MyBean">
    <property name="x" value="xx"/>
    <property name="y" value="yy"/>
    <property name="z" value="zz"/>       
</bean>
<bean id="someBean2" class="org.mm.MyBean">
    <property name="x" value="other value"/>
    <property name="y" value="yy2"/>
    <property name="z" value="zz2"/>       
</bean>

Wie zwei Instanzen derselben Klasse instanziieren und initialisieren sie mit verschiedenen Feldwerten?

War es hilfreich?

Lösung

Zwei Optionen, soweit ich sehen kann:

  • Ohne weitere Kenntnis Ihrer usecase, gehe ich davon aus, dass Sie entweder zur Verfügung stellen möchten einige alternative Implementierung für (mock) Testen oder Konfigurationsprobleme (sagen andere PaymentProvider für eine Order). Dies wird durch die Spezifikation unterstützt sich, einen Blick auf @Alternative hier

  • (und meinen ersten Fehler nicht aktivieren Alternativen in beans.xml wiederholen und vergessen)
  • Um eine Feder Stil XML-Konfiguration zu erhalten, können Sie Seam 3 Config , das bietet XML-Konfiguration, die gerade, wie beschrieben. BTW, dies war ein Teil von JSR 299, hat aber von der Spezifikation aus irgendeinem Grund entfernt worden ist.

Andere Tipps

Es gibt ein paar Möglichkeiten, das zu tun.

z. Verwendung @New

Private @Inject @New YourBean yb; Privat @Inject @New YourBean yb2;

Dies zwingt der Behälter eine neue Instanz zu erstellen, egal welchen Umfang die Bohne ursprünglich hatte.

Eine andere Möglichkeit wäre, einfach YourBean zu definieren als @Dependent scoped (was übrigens ist (derzeit) die Standardeinstellung, wenn eine Klasse überhaupt nicht erwähnt wird,).

Sie können ganz einfach Produzenten Methoden verwenden und wenn Sie mehr Instanzen haben, die durch ein Verfahren Verwendung CDI-Qualifikation hergestellt werden soll verschiedene Arten von Fällen zu unterscheiden.

Sie können auch Seam Config es Frühling Art und Weise zu tun, aber ich denke, Produzent Methoden sind eleganteren Weg, dies zu tun. Je nach Anwendungsfall gibt es eine weitere Option, die @Alternative ist.

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