java - 使用在不同的基于 java 的 Spring 配置文件中定义的原型(prototype) beans

标签 java spring spring-3

假设我们有两个 spring 配置文件:ConfigA.javaConfigB.java

下面是 ConfigA.java 的样子:

@Configuration
class ConfigA {

  @Scope("prototype") 
  @Bean public Foo fooPrototype() {
      return new Foo(params);
  }
}

现在我想将 Foo 的几个实例注入(inject)到 ConfigB.java 中声明的多个单例范围的 bean 中:

@Configuration
@Import(ConfigA.class)
class ConfigB {

  @Bean public Bar bar() {
      return new Bar(*** how to inject Foo instance here? ***);
  }

  @Bean public Buzz buzz() {
      return new Buzz(*** how to inject Foo instance here? ***);
  }    
}

如果我只有一个配置文件,我会简单地用 fooPrototype() 替换星号中的 block 。

但是,如果 fooPrototype() 在不同的配置文件中声明,如何将不同的 Foo 实例注入(inject) bar() 和 buzz() bean?

最佳答案

这看起来类似于 Spring 文档中的示例 §5.12.5 Composing Java-based configurations .

同一页面提供了一个解决方案:您可以 Autowiring 配置 bean。

@Configuration
@Import(ConfigA.class)
class ConfigB {

    @Autowired ConfigA configA;

    @Bean public Bar bar() {
        return new Bar(configA.fooPrototype());
    }

    @Bean public Buzz buzz() {
        return new Buzz(configA.fooPrototype());
    }
}

关于java - 使用在不同的基于 java 的 Spring 配置文件中定义的原型(prototype) beans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26736331/

相关文章:

java - OTA(空中)缩写

java - 在 POST 请求上验证表单时出现问题(Spring Boot)

java - Spring Framework 在 JBoss 上看不到 cglib

java - 如何在启动时加载应用程序范围的设置(对于 Spring3 webapp)?

java - Java 的 LinkedList 是否优化为在必要时反向执行 get(index)?

java - SimpleJdbcCall : get result of Microsoft/Sybase stored procedure call

java - 我的Java程序已编译但无法运行

java - Spring Batch 是否具有跟踪已处理行的功能?

java - 通过传递构造函数参数来实例化Spring bean?

spring-3 - RequestMapping 存在多个参数之一