我有一个枚举类
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/