Java 使用spring将枚举值注入属性

Java 使用spring将枚举值注入属性,java,spring,Java,Spring,我有一个类似于下面的枚举 public enum MyEnum { ABC("some string"), DEF("some string"), GHI("another string"); String value; private MyEnum(String value) { this.value = value; } public String value() { return this.value; }} 我想使用enum的值作为键而不是enum本身来创建一

我有一个类似于下面的枚举

public enum MyEnum {
ABC("some string"), 
DEF("some string"), 
GHI("another string");

String value;

private MyEnum(String value) {
    this.value = value;
}

public String value() {
    return this.value;
}}
我想使用enum的值作为键而不是enum本身来创建一个util:map。因此,地图将如下所示:

"some string" -> "mapped output 1"
"another string" -> "mapped output 2"
<util:constant id="firstKey" static-field="package.MyEnum.ABC"/>
<util:constant id="secondKey" static-field="package.MyEnum.GHI" />


<util:map id="myMap">
    <entry key-ref="firstKey" value="mapped output 1" />
    <entry key-ref="secondKey" value="mapped output 2" /></util:map>
我知道我可以使用util:constant获取枚举,但我需要枚举表示的值

因此,我当前的配置文件如下所示:

"some string" -> "mapped output 1"
"another string" -> "mapped output 2"
<util:constant id="firstKey" static-field="package.MyEnum.ABC"/>
<util:constant id="secondKey" static-field="package.MyEnum.GHI" />


<util:map id="myMap">
    <entry key-ref="firstKey" value="mapped output 1" />
    <entry key-ref="secondKey" value="mapped output 2" /></util:map>

是否有一种方法可以获取.value(),甚至可以访问value属性以将其用作键

我试图将键类型声明为string,希望spring能够解决这个问题,但它似乎忽略了这一点


使用Spring2.5.1,我无法修改枚举,下面是如何获取Spring2.5中的spring配置中注入的值

<bean id="abcEnum" class="com.ex.springbasicex.enums.MyEnum"   factory-method="valueOf">
    <constructor-arg>
        <value>ABC</value>
    </constructor-arg>
</bean>

<bean id="defEnum" class="com.ex.springbasicex.enums.MyEnum" factory-method="valueOf">
    <constructor-arg>
        <value>DEF</value>
    </constructor-arg>
</bean>

<bean id="abcString" class="java.lang.String" factory-method="valueOf">
    <constructor-arg>
        <ref bean="abcEnum"></ref>
    </constructor-arg>
</bean>
<bean id="defString" class="java.lang.String" factory-method="valueOf">
    <constructor-arg>
        <ref bean="defEnum"></ref>
    </constructor-arg>
</bean>

<util:map id="myMap" map-class="java.util.HashMap" key-type="java.lang.String" value-type="java.lang.String">
    <entry key-ref="abcString" value="mapped output 1"  />
    <entry key-ref="defString" value="mapped output 2" />
</util:map>

如果您没有访问表达式语言的权限,则必须返回显式的
MethodInvokingFactoryBean


您可以使用抽象的父bean定义将重复的XML缩短一点


您也可以跳过
方法调用FactoryBean
,只使用



但这意味着为每个枚举常量以及它们的
值()
声明单独的顶级bean,而使用MIFB允许使用匿名内部bean。

我认为spring 2.5.1不支持SpEL,我也不能修改enum类以添加getValue()。@ManuelQuinones OP说他们“无法修改枚举”我想试试@IanRoberts的建议。在我看来,它是Spring2.5的一个干净的解决方案