java - 使用 Spring @Configuration 注释注入(inject) bean 列表

标签 java spring spring-annotations

我有一个 Spring bean,在 Spring Bean 中我依赖于其他 bean 的列表。我的问题是:我怎样才能注入(inject)一个通用的 bean 列表作为该 bean 的依赖项?

例如一些代码:

public interface Color { }

public class Red implements Color { }

public class Blue implements Color { }

我的 bean :

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 返回接口(interface)类型还是类?

感谢您的帮助!

最佳答案

你有什么应该工作,有一个 @Resource@Autowired在二传手上应该将 Color 的所有实例注入(inject)你的 List<Color>字段。

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

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

并以这种方式将其用作 Autowiring 字段:

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

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

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

关于java - 使用 Spring @Configuration 注释注入(inject) bean 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14892757/

相关文章:

java - 将抽屉导航添加到空白 Activity

java - log4j2 RollingFile Appender 不更改 Tomcat 上的文件名?

java - 为什么在Controller注解中使用@Component

java - 如何在 spring mvc 中获取另一个表单操作中的一个表单值

java - 重命名所有风格的类

java - LibGdx 了解视口(viewport)并将其与 Scene2D 关联

java - 将 Java 连接传递给多个公共(public)函数的安全问题

java.lang.ClassNotFoundException : org. springframework.core.io.Resource

java - Spring @ModelAttribute 不应该将属性添加到 View 中吗?

spring-boot - Spring中通过注解向构造函数注入(inject)参数