在下面的Spring Java配置依賴一個bean:引用使用的Spring Java配置
@Configuration
@EnableAutoConfiguration
@ComponentScan("my.package")
public class Config {
@Bean
public BasicBean basicBean1() {
return new BasicBean("1");
}
@Bean
public BasicBean basicBean2() {
return new BasicBean("2");
}
@Bean
public ComplexBean complexBeanByParameters(List<BasicBean> basicBeans) {
return new ComplexBean(basicBeans);
}
@Bean
public ComplexBean complexBeanByReferences() {
return new ComplexBean(Arrays.asList(basicBean1(), basicBean2()));
}
}
我可以使用任一參數注入,這是優雅的,但也有缺點創建兩個ComplexBean
■如果有一些其他的豆BasicBean
類型,只需要幾個(參數當然可以是BasicBean
類型,並按名稱枚舉我感興趣的bean,但它可能會變成一個很長的列表,至少出於參數的原因)。如果我想直接引用bean,我可以使用complexBeanByReferences
樣式,這在訂購或其他考慮的情況下可能很有用。
但是說,我想用complexBeanByReference
風格引用豆complexBeanByParameters
,即沿着線的東西:
@Bean
public ComplexBeanRegistry complexBeanRegistry() {
return new ComplexBeanRegistry(
Arrays.asList(
complexBeanByParameters(), // but this will not work!
complexBeanByReferences()
)
);
}
我將如何引用complexBeanByParameters
,而不必指定依賴關係的列表complexBeanRegistry
?哪一個,後者誠實應該完全沒有意識。
有隻使用
public ComplexBeanRegistry complexBeanRegistry(List<ComplexBeans> complexBeans) {...}
當然
的選擇,但是從spring-context
使用CacheConfigurer
時,這可能不是在某些情況下一個選項,具體。在這種情況下,Java的配置是爲了
- 通過實施
CacheConfigurer
創建豆 - ,覆蓋
CacheManager
和KeyGenerator
豆的默認實例。
執行CacheConfigurer
的要求意味着我不能更改簽名以使用參數注入。
所以問題是,有沒有辦法引用complexBeanByParameters
使用「直接」引用樣式?
我目前的解決方案是拆分我在不同的文件配置,並通過自動裝配豆一個配置,將其注入到'CacheConfigurer' bean聲明中 - 模擬應該是將'complexBeanRegistry'聲明在一個單獨的配置中並自動裝入'complexBeanByParameters' bean。 – zrvan 2015-02-10 15:49:19