我有一个课程:
@Autowired
private Map<String, Response> violationResponseMap;
这在应用程序上下文中声明为:
<util:map id="violationResponseMap">
<entry key="INVALID_PARAM" value-ref="X" />
</util:map>
<bean
id="X"
class="foo.bar.ViolationResponseFactoryBean"
c:message="#{null}"
c:status="404" />
在检查violationResponseMap的KeySet时,我得到:
X
但是给定与上面相同的bean声明,当我将violationResponseMap中的注释更改为:
@Resource(name = "violationResponseMap")
private Map<String, Response> violationResponseMap;
我收到了密钥INVALID_PARAM
为什么声明相同时会产生不同的结果?
答案 0 :(得分:0)
@Resource
将连接名为violationResponseMap
的bean,而@Autowired
将注入一个Map
,其中包含Response
类型的所有bean,其中键是豆子。请参阅http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-autowired-annotation。
答案 1 :(得分:0)
所有这些都在the docs中解释:
(...)只要预期的键类型为String,就可以自动装配类型化的地图。 Map值将包含所需类型的所有bean,键将包含相应的bean名称
和
(...)无法通过@Autowired注入自身定义为集合或映射类型的bean,因为类型匹配不适用于它们。将@Resource用于此类bean,以唯一名称引用特定集合或映射bean。