gpt4 book ai didi

java - 使用 spring 将枚举的值注入(inject)到属性中

转载 作者:搜寻专家 更新时间:2023-10-31 19:29:11 26 4
gpt4 key购买 nike

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

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;
}}

我想制作一个 util:map 使用枚举的值作为键而不是枚举本身。所以 map 看起来像这样:

"some string" -> "mapped output 1"
"another string" -> "mapped output 2"

我知道我可以使用 util:constant 来获取枚举,但我需要枚举代表的值。

所以我当时的配置文件是这样的:

<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 属性以将其用作键?

我尝试将键类型声明为字符串,希望 spring 能够解决这个问题,但它似乎只是忽略了这一点。

使用 spring 2.5.1,我无法修改枚举

最佳答案

如果您无法访问表达式语言,则必须回退到显式 MethodInvokingFactoryBean

<bean id="firstKey" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject"><util:constant static-field="package.MyEnum.ABC"/></property>
<property name="targetMethod" value="value" />
</bean>

您可以使用抽象父 bean 定义稍微缩短重复的 XML。

<bean name="enumValue" abstract="true"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetMethod" value="value" />
</bean>

<bean id="firstKey" parent="enumValue">
<property name="targetObject"><util:constant static-field="package.MyEnum.ABC"/></property>
</bean>

您也可以跳过 MethodInvokingFactoryBean 并直接使用

<util:constant id="MyEnum_ABC" static-field="package.MyEnum.ABC" />
<bean id="firstKey" factory-bean="MyEnum_ABC" factory-method="value" />

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

关于java - 使用 spring 将枚举的值注入(inject)到属性中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com