Spring bean xml配置:映射因自动装配失败

时间:2018-10-17 17:30:27

标签: java spring spring-boot autowired

我遇到的情况是,添加@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错误?解决此问题的最佳方法是什么?我使用了另一个手头的项目,该项目也使用了这种映射结构,并且注释在该项目上没有缺陷。

1 个答案:

答案 0 :(得分:0)

如果您使用的是注释样式

@Resource(name = "<name of map>")来插入地图,而不是@Autowired