使用在不同的基于java的Spring配置文件中定义的原型bean

时间:2014-11-04 13:28:09

标签: java spring spring-3

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

以下是ConfigA.java的样子:

@Configuration
class ConfigA {

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

现在我想向Foo中声明的一些单例范围的bean注入一些ConfigB.java实例:

@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()替换星号中的块。

但是,如何在不同的配置文件中声明为{(1}}提供的bar()和buzz()bean注入不同的Foo实例?

2 个答案:

答案 0 :(得分:2)

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

同一页面提供了一个解决方案:您可以自动装配配置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());
    }
}

答案 1 :(得分:1)

你不能只将fooPrototype作为方法arg传递吗? E.g:

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

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