Spring - 如何在带有注释的 map 中设置枚举键

标签 spring enums annotations

我有一个枚举类

public enum MyEnum{
    ABC;
}

比我的 'Mick' 类(class)有这个属性

private Map<MyEnum, OtherObj> myMap;

我有这个 spring xml 配置。

<util:map id="myMap">
    <entry key="ABC" value-ref="myObj" />
</util:map>

<bean id="mick" class="com.x.Mick">
    <property name="myMap" ref="myMap" />
</bean>

这很好。
我想用 Spring 注解替换这个 xml 配置。
您对如何自动连接 map 有任何想法吗?

这里的问题是,如果我从 xml 配置切换到 @Autowired 注释(在 Mick 类的 myMap 属性上),Spring 会抛出这个异常

nested exception is org.springframework.beans.FatalBeanException: Key type [class com.MyEnum] of map [java.util.Map] must be assignable to [java.lang.String]

Spring 不再能够将字符串 ABC 识别为 MyEnum.ABC 对象。
有什么想法吗?

谢谢

最佳答案

这对我有用...

我的 Spring 应用上下文:

<util:map id="myMap">
  <entry key="#{T(com.acme.MyEnum).ELEM1}" value="value1" />
  <entry key="#{T(com.acme.MyEnum).ELEM2}" value="value2" />
</util:map>

Map 被注入(inject)的类(class):

public class MyClass {

    private @Resource Map<MyEnum, String> myMap;
}

需要注意的重要一点是,在 Spring 上下文中,我使用了 SpEL(Spring 表达式语言),它仅在 3.0 版之后才可用。在我的类里面,我使用了 @Resource,既不是 @Inject(它对我不起作用)也不是 @Autowired(我没有尝试这个)。我知道 @Resource@Autowired 之间的唯一区别是前者按 bean 名称自动注入(inject),而后者按 bean 类型自动注入(inject)。

享受吧!

关于Spring - 如何在带有注释的 map 中设置枚举键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1174308/

相关文章:

java - Spring:将字符串从 View 转换为日历对象

java - spring data jpa 不必要的左连接

java:54: 错误:需要类、接口(interface)或枚举,但构建失败并出现异常

java - 字母数字字符串的@Pattern - Bean 验证

java - JPA LinkedHashMap 注释

Spring Data Rest 发布到收集端点

java - 使用 spring 集成 IMAP 适配器,如何手动获取标记为 "unread"的电子邮件?

arrays - 遍历任何类型的数组

c# - JsonConvert.DeserializeObject 函数在解析过时的枚举属性时抛出错误

java - java注解能做什么,不能做什么?