Domanda

In Spring era possibile istanziare qualsiasi classe definendo bean corrispondente XML conf. E 'stato anche possibile istanziare più di un fagiolo per la stessa classe con parametri diversi .....

Sono le tali caratteristiche in CDI così, e cioè è possibile creare diverse istanze della stessa classe con diversi parametri di inizializzazione?

E 'anche possibile creare un fagiolo senza cambiare la classe .... voglio dire senza l'aggiunta di annotazioni?

AGGIUNTO

Permettetemi di fare un esempio.

<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>

Come creare un'istanza di due istanze della stessa classe e inizializzare con diversi valori di campo?

È stato utile?

Soluzione

Due opzioni per quanto posso vedere:

  • Senza ulteriore conoscenza del vostro caso d'uso, suppongo che si sia desidera fornire alcune implementazione alternativa per (mock) problemi di test o di configurazione (ad esempio un altro PaymentProvider per un OrderService). Questo è supportato dalle specifiche per sé, dare un'occhiata a @Alternative qui (e non ripetere il mio errore iniziale e dimenticare di attivare alternative in beans.xml)

  • Per ottenere un XML di configurazione-stile della molla, è possibile utilizzare Seam 3 Config , che fornisce XML configurazione appena descritta. BTW, questa è stata una parte della JSR 299, ma è stato rimosso dalla specifica per qualsiasi motivo.

Altri suggerimenti

ci sono alcuni modi per farlo.

es. uso @New

privato YB @Inject @New YourBean; privato @Inject @New YB2 YourBean;

In questo modo il contenitore per creare una nuova istanza, a prescindere quali possibilità il fagiolo in origine aveva.

Un altro modo sarebbe quello di definire semplicemente YourBean come @Dependent scope (che è btw (attualmente) predefinito se una classe non viene annotata affatto).

Si può facilmente utilizzare i metodi produttori e se si dispone di più istanze che dovrebbe essere prodotto con un metodo utilizzare qualificazioni CDI per distinguere i diversi tipi di casi.

Inoltre è possibile utilizzare Seam Config per farlo modo primavera, ma penso che i metodi produttori sono più elegante modo di fare questo. a seconda del caso d'uso c'è un'altra opzione che è @Alternative.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top