我遇到的情况是,添加@Autowired
注释会给我以下错误:
Field myMap in my.package.MyClassA required a bean of type 'java.lang.String' that could not be found.
但是,如果我删除注释,注释将正常工作,并且地图会初始化。这是我的代码的样子:
MyClassA.java
public class MyClassA {
private static int maxRetry;
@Autowired
private Map<String, String> myMap;
/* Setters and Getters */
}
MyClassB.java
public class MyClassB {
@Autowired
private MyClassA myClassA;
/* Do something with myClassA */
}
bean-config.xml
<bean id="myMapBean" class="java.util.HashMap" scope="singleton">
<constructor-arg>
<map>
<entry key="R01" value="A" />
<entry key="R02" value="B" />
</map>
</constructor-arg>
</bean>
<bean id="myClassA" class="my.package.MyClassA">
<property name="maxRetry">
<value>10</value>
</property>
<property name="myMap" ref="myMapBean" />
</bean>
我尝试使用util:map
,但得到的结果完全相同。
我尝试过的另一种解决方案是将地图设置为静态字段(与类中的其他字段一样)并取出注释,因为我已经知道@Autowired
不适用于静态字段,但是如果我不要自动装配private MyClassA myClassA
,静态字段不会使用xml中设置的值进行初始化。在@Component
上使用MyClassA
进行了尝试,但这也不能解决问题。
我做错了事还是使用了@Autowired
错误?解决此问题的最佳方法是什么?我使用了另一个手头的项目,该项目也使用了这种映射结构,并且注释在该项目上没有缺陷。
答案 0 :(得分:0)
如果您使用的是注释样式
@Resource(name = "<name of map>")
来插入地图,而不是@Autowired
。