【问题标题】:autowire typed map in spring not working春季自动装配地图不起作用
【发布时间】: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&lt;String, T&gt; 自动装配是一种特殊的自动装配,因为它会在地图中为您提供 T 类型的所有 bean。它不会注入具有特定名称的 map 类型的 bean。如果它仍然为空,如您所说,您还没有设置基于注释的自动装配,这意味着您缺少&lt;context:annotation-config /&gt;&lt;context:component-scan /&gt;,后者意味着第一个。
  • 这是否意味着我的 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,但我无法通过注释获得它。我为包裹准备了&lt;context:component-scan。还有&lt;context:annotation-config /&gt;
  • 您所说的“服务”bean 是什么?同样如最初所述,Map&lt;String, T&gt; 被 Spring 特殊对待。

标签: java spring autowired


【解决方案1】:

虽然我无法直接解决问题,但我使用 spring 服务定位器来解决它,最终将地图包裹在其中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-03
    • 2019-08-02
    • 2017-12-13
    • 2017-04-28
    • 2015-12-11
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多