使用Spring @Configuration批注注入bean列表

时间:2013-02-15 10:32:03

标签: java spring spring-annotations

我有一个Spring bean,在Spring Bean中我依赖于其他bean的列表。我的问题是:如何将bean的通用列表注入该bean的依赖项?

例如,一些代码:

public interface Color { }

public class Red implements Color { }

public class Blue implements Color { }

我的豆子:

public class Painter {
  private List<Color> colors;

  @Resource
  public void setColors(List<Color> colors) {
      this.colors = colors;
  }
}

@Configuration
public class MyConfiguration {

  @Bean
  public Red red() {
    return new Red();
  }

  @Bean
  public Blue blue() {
    return new Blue();
  }

  @Bean
  public Painter painter() {
    return new Painter();
  }
}

问题是;如何获取Painter中的颜色列表?另外,请注意:我应该让@Configuration返回接口类型还是类?

感谢您的帮助!

1 个答案:

答案 0 :(得分:14)

您应该有所作为,在设置器上设置@Resource@Autowired时,应将所有颜色实例注入List<Color>字段。

如果你想更明确,你可以将一个集合作为另一个bean返回:

@Bean
public List<Color> colorList(){
    List<Color> aList = new ArrayList<>();
    aList.add(blue());
    return aList;
}     

并以这种方式将其用作自动装配字段:

@Resource(name="colorList") 
public void setColors(List<Color> colors) {
    this.colors = colors;
}

OR

@Resource(name="colorList")
private List<Color> colors;

关于返回接口或实现的问题,任何一个都应该有效,但接口应该是首选。