2014-11-04 37 views
2

假设我们有两个弹簧配置文件:ConfigA.javaConfigB.java使用在不同的基于java的Spring配置文件中定义的原型beans

下面是如何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()来替换星号中的块。

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

回答

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

难道你不能仅仅通过fooPrototype作为arg方法吗?例如:

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

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