Pregunta

En la primavera de que era posible crear una instancia de cualquier clase definiendo el bean correspondiente en conf xml. También era posible crear una instancia más de un frijol para la misma clase con diferentes parámetros .....

Son los tales características en CDI, así, es decir, es posible crear diferentes instancias de la misma clase con diferentes parámetros de inicialización?

¿Es también posible crear un grano sin cambiar la clase .... quiero decir, sin añadir anotaciones?

AÑADIDO

Vamos a hacer un ejemplo.

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

¿Cómo se puede crear una instancia de dos instancias de la misma clase y les inicializar con diferentes valores de campo?

¿Fue útil?

Solución

Dos opciones como lo que puedo ver:

  • Sin más conocimiento de su caso de uso, supongo que usted tampoco quiere proporcionar alguna aplicación alternativa (maqueta) Pruebas de configuración o temas (decir otra PaymentProvider para un OrderService). Esto es apoyado por la propia especificación, echar un vistazo a @Alternative aquí (y no repetir mi error inicial y se olvide de las alternativas se activan en beans.xml)

  • Para obtener un XML de configuración de estilo de primavera, se puede utilizar Seam 3 Config , que proporciona XML-configuración tal como se describe. Por cierto, esto ha sido una parte de JSR 299, pero se ha eliminado de la especificación por cualquier razón.

Otros consejos

hay algunas maneras de hacer eso.

por ejemplo. uso @New

privada YB @Inject @New YourBean; privada YB2 @Inject @New YourBean;

Esto obliga a los contenedores para crear una nueva instancia, sin importar lo que alcance el grano tenía originalmente.

Otra forma sería la de definir simplemente como YourBean @Dependent de ámbito (que por cierto es (actualmente) el valor predeterminado si una clase no se anota en absoluto).

Se puede utilizar fácilmente los métodos de productor y, si tiene varias instancias que deben ser producidos por una clasificación para el uso del método de CDI para distinguir los diferentes tipos de casos.

También puede utilizar Seam Config para hacerlo a la manera de primavera, pero creo que los métodos de producción son la forma más elegante de hacer esto. dependiendo de su caso de uso no hay otra opción que es @Alternative.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top