Java 如何分配bean';在Spring配置文件中是否有枚举值?
我定义了一个独立的枚举类型,如下所示:Java 如何分配bean';在Spring配置文件中是否有枚举值?,java,spring,Java,Spring,我定义了一个独立的枚举类型,如下所示: package my.pkg.types; public enum MyEnumType { TYPE1, TYPE2 } 现在,我想将该类型的值注入bean属性: …但这不起作用:( 我应该如何向SpringBean中注入枚举?您尝试过“类型1”吗?我想spring使用反射来确定“类型”的类型,因此完全限定的名称是冗余的。spring通常不订阅冗余!您可以只执行“类型1”。您可以编写bean编辑器(详细信息在spring文档中)如
package my.pkg.types;
public enum MyEnumType {
TYPE1,
TYPE2
}
现在,我想将该类型的值注入bean属性:
…但这不起作用:(
我应该如何向SpringBean中注入枚举?您尝试过“类型1”吗?我想spring使用反射来确定“类型”的类型,因此完全限定的名称是冗余的。spring通常不订阅冗余!您可以只执行“类型1”。您可以编写bean编辑器(详细信息在spring文档中)如果要添加更多值并写入自定义类型。请使用value子元素而不是value属性,并指定枚举类名:
外星人
与只编写
value=“ALIEN”
相比,这种方法的优点是,如果Spring无法从属性推断枚举的实际类型(例如,属性声明的类型是接口),它也可以工作.改编自araqnid的评论。我知道这是一个非常古老的问题,但如果有人正在寻找更新的方法来实现这一点,请使用spring util名称空间:
<util:constant static-field="my.pkg.types.MyEnumType.TYPE1" />
如。中所述,这是它为我做的事情MessageDeliveryMode是该bean将具有持久值的枚举:
<bean class="org.springframework.amqp.core.MessageDeliveryMode" factory-method="valueOf">
<constructor-arg value="PERSISTENT" />
</bean>
Spring集成示例,基于枚举字段的路由:
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>
使用SPEL和p名称空间:
<beans...
xmlns:p="http://www.springframework.org/schema/p" ...>
..
<bean name="someName" class="my.pkg.classes"
p:type="#{T(my.pkg.types.MyEnumType).TYPE1}"/>
..
具体地说,将该值设置为枚举类型的常量的名称,例如,在您的示例中为“TYPE1”或“TYPE2”,如下所示。该值将起作用:
如果Spring无法从属性推断枚举的实际类型(例如,该属性只是一个接口),则此操作有效@araqnid:很好。我冒昧地将其添加到了答案中。@Tsering:我可以在值标记中使用Spring EL吗?${abc:ALIEN}很奇怪,完全限定名不起作用。但是如果我想使用类似“${tes.db.database:ORACLE}”的东西,即默认一个属性,它会失败。请帮助