我定义了一个独立的枚举类型,如下所示:
package my.pkg.types;
public enum MyEnumType {
TYPE1,
TYPE2
}
现在,我想将该类型的值注入bean属性:
<bean name="someName" class="my.pkg.classes">
<property name="type" value="my.pkg.types.MyEnumType.TYPE1" />
</bean>
......那不起作用:(
我应该如何将一个枚举注入一个春豆?
答案 0 :(得分:124)
您是否尝试过“TYPE1”?我想Spring总是使用反射来确定“类型”的类型,因此完全限定名称是多余的。 Spring通常不会订阅冗余!
答案 1 :(得分:38)
使用value子元素而不是value属性并指定Enum类名:
<property name="residence">
<value type="SocialSecurity$Residence">ALIEN</value>
</property>
这种方法优于编写value="ALIEN"
的优点是,如果Spring无法从属性中推断枚举的实际类型(例如,属性的声明类型是接口),它也可以工作。 改编自araqnid的评论。
答案 2 :(得分:30)
我知道这是一个非常古老的问题,但如果有人正在寻找更新的方法,请使用spring util命名空间:
<util:constant static-field="my.pkg.types.MyEnumType.TYPE1" />
如spring documentation中所述。
答案 3 :(得分:11)
你可以做“TYPE1”。
答案 4 :(得分:4)
这就是为我做的事MessageDeliveryMode是枚举bean将具有值PERSISTENT:
<bean class="org.springframework.amqp.core.MessageDeliveryMode" factory-method="valueOf">
<constructor-arg value="PERSISTENT" />
</bean>
答案 5 :(得分:4)
使用SPEL和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}"/>
答案 6 :(得分:0)
如果要添加更多值并写入自定义类型,可以编写Bean编辑器(详细信息在Spring文档中)。
答案 7 :(得分:0)
Spring-integration示例,基于Enum字段的路由:
public class BookOrder {
public enum OrderType { DELIVERY, PICKUP } //enum
public BookOrder(..., OrderType orderType) //orderType
...
配置:
<router expression="payload.orderType" input-channel="processOrder">
<mapping value="DELIVERY" channel="delivery"/>
<mapping value="PICKUP" channel="pickup"/>
</router>
答案 8 :(得分:0)
具体而言,将值设置为枚举类型常量的名称,例如,在您的情况下为“TYPE1”或“TYPE2”,如下所示。它会起作用:
<bean name="someName" class="my.pkg.classes">
<property name="type" value="TYPE1" />
</bean>