【问题标题】:how to auto inject multiple beans into an ArrayList property with spring and its annotation如何使用spring及其注释将多个bean自动注入ArrayList属性
【发布时间】:2016-09-22 20:23:29
【问题描述】:

例如我的 Action 中有一个数组列表属性。

    private ArrayList<SitesBusiness> businesses;

SitesBusiness 只不过是一个接口,而此属性旨在包含所有实现 SitesBusiness 的 bean。

问题是我想使用 spring 注释机制将所有实现 SitesBusiness 的 bean 自动注入到业务中。

有人可以帮忙吗?非常感谢。

我尝试在这种方法上使用 AutoWired 来完成这项工作

    @Autowired
    public void addBusiness(SitesBusiness business) {
        System.out.println("SitesAction, addBusiness.DI1210, business.identifier: " + business.getIdentifier());
        for (int i = 0; i < this.businesses.size(); ++i) {
            if (GlobalMethods.getInstance().checkEqual(this.businesses.get(i), business) || GlobalMethods.getInstance().checkEqual(this.businesses.get(i).getIdentifier(), business.getIdentifier())) {
                return;
            }
        }
        this.businesses.add(business);
     }

不幸的是,这就是我得到的:

     expected single matching bean but found 2: accountBusiness,diaryBusiness

【问题讨论】:

  • 如果你用 List 替换 ArrayList 应该可以工作
  • @Autowired List&lt;SitesBusiness&gt; businesses; 可以工作。
  • @manish 谢谢,将类型更改为 List 时,Autowired 正常工作。这对我来说完全是一种魔法。很抱歉,我不知道如何将您的答案标记为正确答案。

标签: java spring jsp autowired


【解决方案1】:

这段代码应该可以工作:

@Autowired
private List<SitesBusiness> businesses;

【讨论】:

  • 情况并非如此。我的意思是你不能自动连接一个准备好使用的 ArrayList。我们所拥有的是实现 SitesBusiness 的类,这些类都使用 Component 进行了注释。这些候选 bean 没有分组到 ArrayList。
  • 对不起,我不明白你的评论。您将得到一个列表,其中列出了其类实现了 SitesBusiness 接口的所有 bean。这不是你需要的吗?
  • 是的,但我的意思是,候选 bean 是使用 spring 注释自动创建的。您不能假设该列表已经准备好进行一次性注入。
猜你喜欢
  • 2010-09-23
  • 2012-08-06
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 2017-06-18
  • 2015-12-14
相关资源
最近更新 更多