Spring如何将列表注入构造函数参数

时间:2014-09-02 15:54:03

标签: java spring

这个:

@Named
@Singleton
public class MyDefaultDef {

  @Inject
  public MyDefaultDef(SomeRef someRef, List<AnotherRef> anotherRefs) {
    //...
  }
  //...
}

问题1:[主要] 如何将List<AnotherRef> anotherRefs作为构造函数自动装配arg?

我的意思是如果我想用xml替换那个bean定义,我必须指定列表的每个元素。即

<constructor-arg>
  <list> 
     <ref bean="..."/>
     <ref bean="..."/>
  </list> 
</constructor-arg>

但是,Spring会在注释的情况下采用这些元素吗?

问题2: 如何将MyDefaultDef bean定义替换为xml?

1 个答案:

答案 0 :(得分:1)

当Spring需要自动装配List<SomeBean>时,它会查找其BeanFactory中的所有bean,并检索所有类型为SomeBean的bean。它会创建一个List并将它们添加到它。然后它自动装配它。

Spring XML无法按类型执行此列表。你需要妥协。你这样离开你的班级

public class MyDefaultDef {

    @Inject
    public MyDefaultDef(SomeRef someRef, List<AnotherRef> anotherRefs) {
        //...
    }
    //...
}

并简单声明

<bean class="com.example.MyDefaultDef" autowire="constructor"/>

Spring将最终使用上面的构造函数。