Question

Au printemps, il était possible d'instancier une classe en définissant la fève correspondante dans le fichier conf xml. Il est également possible d'instancier plus d'un haricot pour la même classe avec des paramètres différents .....

Les telles caractéristiques en CDI et, à savoir est-il possible de créer différentes instances de la même classe avec différents paramètres d'initialisation?

Est-il également possible de créer un haricot sans changer la classe .... Je veux dire sans ajouter une annotation?

AJOUTÉE

Permettez-moi un exemple.

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

Comment peut instancier deux instances de la même classe et les initialiser avec les valeurs des champs différents?

Était-ce utile?

La solution

Deux options pour autant que je peux voir:

  • Sans plus connaissance de votre usecase, je suppose que vous voulez, soit fournir une mise en œuvre alternative (mock-) test ou de configuration (par exemple une autre PaymentProvider pour un OrderService). Ceci est pris en charge par la spécification elle-même, jetez un oeil à @Alternative ici (et ne pas répéter mon erreur initiale et d'oublier d'activer des alternatives dans beans.xml)

  • Pour un style de Spring XML configuration, vous pouvez utiliser Seam 3 Config , qui fournit XML configuration comme décrit. BTW, cela a été une partie de JSR 299, mais il a été retiré de la spécification pour une raison quelconque.

Autres conseils

il y a quelques façons de le faire.

par exemple. utilisation @new

@Inject privé @new YourBean yb; @Inject privé @new YourBean yb2;

Cette force le conteneur pour créer une nouvelle instance, quel que soit ce que le grain portée avait à l'origine.

Une autre façon serait de définir simplement YourBean comme @Dependent scope (qui est BTW (actuellement) la valeur par défaut si une classe est pas du tout annotées).

Vous pouvez facilement utiliser des méthodes de production et si vous avez plusieurs instances qui doivent être produits par une méthode utiliser des qualificatifs CDI pour distinguer les différents types d'instances.

Vous pouvez aussi utiliser Seam Config pour le faire de façon printemps, mais je pense que les méthodes de production sont beaucoup plus élégante de le faire. selon votre cas d'utilisation, il est une autre option qui est @Alternative.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top