我可以在我的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文档:
作为这种语义差异的特定结果,自身定义为集合或映射类型的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文档限定符微调基于注释的自动装配的提示
| 归档时间: |
|
| 查看次数: |
26426 次 |
| 最近记录: |