可以使用Spring创建HashMap但不能创建Map

Kiv*_*iva 25 spring

我可以在我的applicationContext with Spring(3.0.5)中执行此操作:

<bean id="map" class="java.util.HashMap" scope="prototype" >
    <constructor-arg>
        <map key-type="java.lang.String" value-type="java.lang.String">
            <entry key="Key 1" value="1" />
            <entry key="Key 2" value="2" />
        </map>
    </constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我可以像这样自动装配我的地图:

@Autowired
@Qualifier("map")
private HashMap<String, String> map;
Run Code Online (Sandbox Code Playgroud)

它工作正常,但如果我这样做:

@Autowired
@Qualifier("map")
private Map<String, String> map;
Run Code Online (Sandbox Code Playgroud)

我明白了:

引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[java.lang.String]的匹配bean为依赖[map with value type java.lang.String]:期望至少有一个bean有资格作为autowire候选者对于这种依赖.依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true),@ org.springframework.beans.factory.annotation.Qualifier(value = map)}

我的问题是:为什么我无法使用界面自动连接我的地图?

谢谢.

Vir*_*tel 36

在声明类型集合的bean时,无法通过@Autowired注入它.请参阅以下Spring文档:

4.11.3使用限定符微调基于注释的自动装配

作为这种语义差异的特定结果,自身定义为集合或映射类型的bean不能通过@Autowired注入,因为类型匹配不适用于它们.对这样的bean使用@Resource,通过唯一名称引用特定的collection/map bean.

因此@Autowired,使用@Resource:

@Resource
@Qualifier("map")
private Map<String, String> map;
Run Code Online (Sandbox Code Playgroud)


Sta*_*ley 11

尝试使用@Resource而不是@Autowired

@Resource(name="map") 
private HashMap<String, String> map;
Run Code Online (Sandbox Code Playgroud)

查看3.9.3使用 Spring文档限定符微调基于注释的自动装配的提示