当前位置: 首页 > 知识库问答 >
问题:

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

韩乐湛
2023-03-14

我有一个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个答案

高泳
2023-03-14

你所拥有的应该可以工作,在setter上有一个@资源@自动加载应该将所有颜色实例注入到你的列表中

如果您想更显式,您可以将集合作为另一个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;
}

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

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

 类似资料:
  • 问题内容: 我有一个代码: 我期望一旦启动应用程序BeanSample.getSomeBean(),然后SomeBean将开始由“ someBean”提供。 现在我有一个错误: 没有定义名为“ someBean”的bean 实际上,我有点不明白应该使用哪个应用程序上下文来提取我的豆子? 关于@Configuration : 有什么原因,为什么我应该在这里使用@Configuration注释?(通过

  • 我已经使用Spring几十年了,但以前从未遇到过这个用例。 是否有方法注入所有带特定注释的bean,例如,所有带服务的bean或所有带自定义注释的bean? 我唯一的想法是注入上下文,获取所有bean并手动过滤。如果这是唯一的方法,Spring是否公开了一种递归扫描类层次结构以查找(元)注释的方法(因为大多数Spring注释都可以用作元注释)?

  • 当有多个具有相同名称/类型的bean时,我对Spring中的DI注入机制有点困惑。根据Pivotal“核心Spring”课程的考试幻灯片,Spring对相同豆子的行为可以归结为: 可以多次定义同一bean Spring注入上次定义的bean 使用订单可以修改加载机制(从而修改最后加载哪个bean) 然而,在下面的示例中,Spring将忽略任何顺序注释,并从Import语句中最后提到的Config类

  • 问题内容: 我试图将在Spring上下文中定义的bean注入到CDI托管组件中,但没有成功。不会注入Bean,而是在每次执行注入时都会创建一个新实例。我的环境是带有JBoss Weld的Tomcat 7。 Spring ApplicationContext很简单: CDI托管bean如下所示: 这是我的 但是,当我从JSF页面访问属性时,每次访问时都会创建一个新实例。这是一个简单的示例: 我得到以

  • 结果是- 属性BeanA和BeanB只是字符串值,那么如何指定bean名称呢?