【发布时间】:2015-01-24 19:57:24
【问题描述】:
我的 xml 中有一个类型为 map 的 bean。但是当我尝试使用@Autowired 使用它时,它并没有按预期工作。我还按照related question 中的建议尝试了@Resource(name = "service")
堆栈溢出也不起作用。
@Resource (name = "service")
private Map<String, service> service;
有没有办法查看xml中的bean是否被正确实例化。我将属性服务值设为null。我已经为此工作了一天。仍然无法解开谜题。虽然我洗劫了spring参考和stackoverflow(奇怪的是spring的地图自动装配很困难或者我做不到)。提前感谢您的帮助。
同样奇怪的是,我提到的相关问题似乎已被许多人接受,但对我不起作用。
【问题讨论】:
-
Map<String, T>自动装配是一种特殊的自动装配,因为它会在地图中为您提供 T 类型的所有 bean。它不会注入具有特定名称的 map 类型的 bean。如果它仍然为空,如您所说,您还没有设置基于注释的自动装配,这意味着您缺少<context:annotation-config />或<context:component-scan />,后者意味着第一个。 -
这是否意味着我的 xml 中不需要任何东西(如 util:map),并且会在地图中获取所有 T 类型的 bean? .假设我有 serv1, serv2 作为 bean,我会得到 serv1, serv2 beans 对键集“serv1”和“serv2”。
-
这就是spring reference guide中解释的理论。
-
当我只使用@resource 时,我得到空值。当我使用@Autowired 时,我得到了你所指出的所有豆子。这样就验证了。但是我如何通过注释获取我的bean?当我执行
Object obj = applicationContext.getBean("service");时,我能够看到生成的 bean,但我无法通过注释获得它。我为包裹准备了<context:component-scan。还有<context:annotation-config /> -
您所说的“服务”bean 是什么?同样如最初所述,
Map<String, T>被 Spring 特殊对待。