我有一个枚举类
public enum MyEnum{
ABC;
}
那么我的“Mick”类就有这个属性
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配置。
你对如何自动绘制地图有什么想法吗?
这里的问题是,如果我从xml config切换到@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对象。
有什么想法吗?
谢谢
发布于 2010-10-23 03:23:57
这对我很有效..。
我的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
:
public class MyClass {
private @Resource Map<MyEnum, String> myMap;
}
需要注意的重要一点是,在Spring上下文中,我使用了SpEL (Spring Expression Language),它只在3.0版本之后才可用。在我的课堂上,我使用的是@Resource
,既不是@Inject
(它对我不起作用),也不是@Autowired
(我没有尝试过这个)。我所知道的@Resource
和@Autowired
之间唯一的区别是,前者按bean名称自动注入,而后者按bean类型自动注入。
享受吧!
发布于 2011-03-23 05:04:08
这个问题让我大吃一惊,但我可以使用David的答案和其他一些链接(如下所示)将其拼凑在一起。
对于
类
@Component
public class MyClass {
private Map<MyEnum, ValueObjectInterface> valueMap;
@Autowired
public void setValueMap(final Map<MyEnum, ValueObjectInterface> valueMap) {
this.valueMap= valueMap;
}
}
枚举
public enum MyEnum{
FOO ("FOO"),
BAR ("BAR"),
BAZ ("BAZ");
}
XML配置文件:
<bean id="valueMap" class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="targetMapClass">
<value>java.util.HashMap</value>
</property>
<property name="sourceMap">
<map key-type="com.company.packagepath.MyEnum">
<entry key="FOO" value-ref="valueObject1" />
<entry key="BAR" value-ref="valueObject2" />
<entry key="BAZ" value-ref="valueObject3" />
</map>
</property>
</bean>
<bean id="valueObject1" class="com.company.packagepath.ValueObject1" />
<bean id="valueObject2" class="com.company.packagepath.ValueObject2" />
<bean id="valueObject3" class="com.company.packagepath.ValueObject3" />
链接
发布于 2012-09-10 23:37:42
应用程序上下文
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd ">
<bean id="myProvider" class="com.project.MapProvider">
<property name="myMap" ref="myMap"/>
</bean>
<util:map id="myMap" key-type="com.project.MyEnum" value-type="com.project.ValueObject">
<entry>
<key><value type="com.project.MyEnum">FOO</value></key>
<ref bean="objectValue1"/>
</entry>
</util:map>
</beans>
Java类
package com.project;
public class MapProvider {
private Map<MyEnum, ValueObject> myMap;
public void setMyMap(Map<MyEnum, ValueObject> myMap) {
this.myMap = myMap;
}
}
https://stackoverflow.com/questions/1174308
复制相似问题