假设我们有两个弹簧配置文件:ConfigA.java
和ConfigB.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实例?
答案 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);
}