Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何分配bean';在Spring配置文件中是否有枚举值?_Java_Spring - Fatal编程技术网

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}”的东西,即默认一个属性,它会失败。请帮助