【问题标题】:Auto-wiring/injection of Individual beans of a type and bean of list of beans of a type in Spring Configuration在 Spring 配置中自动装配/注入一个类型的单个 bean 和一个类型的 bean 列表的 bean
【发布时间】:2020-08-04 23:58:58
【问题描述】:

我的 spring 配置中有以下设置

@Bean
public Myclass myClassOne() {
    return new MyClass();
}

@Bean
public Myclass myClassTwo() {
    return new MyClass();
}

@Bean
public YourClass processAndCreateYourClass(List<MyClass> allMyclasses) {
    //Some business logic to process all myclasses beans so that I can create YourClass bean
     return new YourClass();
}

这按预期工作,我得到了一个在processAndCreateYourClass 中注入的所有 myclasses 的列表(没有自动装配注释)但是如果我还有一个像下面这样的 bean 会怎样

@Bean
public List<Myclass> listOfMyClasses() {
    //return list of my classes from here
}

processAndCreateYourClass 方法中,我期待所有单独声明的myclass bean 和listOfMyClasses 返回的列表的联合。但情况似乎并非如此。期望 Spring 的行为是否公平,或者对此有更好的优雅解决方案?

【问题讨论】:

  • 你需要List&lt;Myclass&gt; 类型的bean吗?但是你有它在processAndCreateYourClass 。你能澄清一下吗? listOfMyClasses 的实现将是什么?
  • 这是一个缺点,因为 Spring 容器处理事物的方式遗留下来,并且需要向后兼容。显式提供任何集合类型的 bean 往往无法按预期工作,最好避免。

标签: java spring spring-boot spring-mvc


【解决方案1】:

嗯.. 我建议您使用限定符将您的 bean 添加到“processAndCreateYourClass”。

这样的东西将具有可维护性和易读性。

@Bean
public YourClass processAndCreateYourClass(@Qualifier("myClassOne") Myclass1, @Qualifier("myClassTwo") Myclass2) {
    //Some business logic to process all myclasses beans so that I can create YourClass bean
     return new YourClass();
}

【讨论】:

    猜你喜欢
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2019-10-30
    相关资源
    最近更新 更多