que mvc leer ejemplo crear bean archivo anotaciones java spring

java - mvc - ¿Cómo se asigna la propiedad de bean a un valor Enum en el archivo de configuración de Spring?



spring mvc ejemplo (9)

¿Has probado solo "TYPE1"? Supongo que Spring utiliza la reflexión para determinar el tipo de "tipo" de todos modos, por lo que el nombre completo es redundante. Spring generalmente no se suscribe a la redundancia!

Tengo un tipo de enumeración independiente definido, algo como esto:

package my.pkg.types; public enum MyEnumType { TYPE1, TYPE2 }

Ahora, quiero inyectar un valor de ese tipo en una propiedad de frijol:

<bean name="someName" class="my.pkg.classes"> <property name="type" value="my.pkg.types.MyEnumType.TYPE1" /> </bean>

... y eso no funcionó :(

¿Cómo debería inyectar un Enum en un grano de primavera?


Ejemplo de integración de primavera, enrutamiento basado en un campo Enum:

public class BookOrder { public enum OrderType { DELIVERY, PICKUP } //enum public BookOrder(..., OrderType orderType) //orderType ...

config:

<router expression="payload.orderType" input-channel="processOrder"> <mapping value="DELIVERY" channel="delivery"/> <mapping value="PICKUP" channel="pickup"/> </router>


Esto es lo que hizo para mí MessageDeliveryMode es la enumeración que el bean tendrá el valor PERSISTENT:

<bean class="org.springframework.amqp.core.MessageDeliveryMode" factory-method="valueOf"> <constructor-arg value="PERSISTENT" /> </bean>


Para ser específico, configure el valor para que sea el nombre de una constante del tipo enum, por ejemplo, "TYPE1" o "TYPE2" en su caso, como se muestra a continuación. Y funcionará:

<bean name="someName" class="my.pkg.classes"> <property name="type" value="TYPE1" /> </bean>


Puede escribir Bean Editors (los detalles se encuentran en Spring Docs) si desea agregar más valor y escribir en tipos personalizados.


Puedes hacer "TYPE1".


Sé que esta es una pregunta muy antigua, pero en caso de que alguien esté buscando la forma más nueva de hacerlo, use el espacio de nombres de Spring Util:

<util:constant static-field="my.pkg.types.MyEnumType.TYPE1" />

Como se describe en la documentación de primavera .


Usando SPEL y P-NAMESPACE:

<beans... xmlns:p="http://www.springframework.org/schema/p" ...> .. <bean name="someName" class="my.pkg.classes" p:type="#{T(my.pkg.types.MyEnumType).TYPE1}"/>


Use el elemento hijo value en lugar del atributo value y especifique el nombre de la clase Enum:

<property name="residence"> <value type="SocialSecurity$Residence">ALIEN</value> </property>

La ventaja de este enfoque sobre simplemente escribir value="ALIEN" es que también funciona si Spring no puede inferir el tipo real de la enumeración de la propiedad (por ejemplo, el tipo declarado de la propiedad es una interfaz). Adaptado del comentario de araqnid.