如何使用spring注释动态地将多个bean注入到单个引用的变量中

时间:2016-06-03 03:10:42

标签: spring-annotations

我有接口A.java和3个类,它们实现了名为B.java,C.java和D.java的A.java接口。现在我尝试像这样注入豆子。

interface A{}

@Component
@Scope("request")
class B implements A{
   //......
}

@Component
@Scope("request")
class C implements A{
   //.....
}

@Component
@Scope("request")
class D implements A{

}

class Implementation{

  @Autowired
  public A obj;

  @Autowired
  private BeanFactory beanFactory;

  String[] beans = {"B","C","D"}; //actually these are coming from database in my case

  for(String beanName : beans){
       obj = (A)beanFactory.getBean(beanName);
        ....//calling some method of particular bean class
  }
}

它显示错误消息:“找不到唯一的bean:包含多个bean [”B“,”C“,”D“]”。

如果我在XML文件中配置这些bean,它工作正常,但我不想使用xml config

如何解决这个问题使用Spring Annonantion?

1 个答案:

答案 0 :(得分:0)

在我看来,问题在于Autowired注释,因为它将按类型进行注入,并且变量的类型为A,因此很难确定实际注入哪个bean,B, C或D.

尝试使用资源注释,决定按名称注入。或者只是添加限定符注释。

在此查看进一步说明:

Difference between @Qualifier and @Resource