使用SpringJava配置引用具有依赖项的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
,这很优雅,但是如果a有一些其他BasicBean
类型的bean,并且只需要几个,那么它就有缺点(参数当然可以是BasicBean
类型,并按名称枚举我感兴趣的bean,但它可能是一个非常长的列表,至少为了参数的缘故)。如果我希望直接引用bean,我可能会使用complexBeanByReferences
样式,这在排序或其他考虑因素时可能很有用
但是,假设我想使用complexBeanByReference
样式来引用bean 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配置旨在
- 创建bean
- 通过实现
CacheConfigurer
,重写CacheManager
和KeyGenerator
bean的默认实例李>
实现CacheConfigurer
的要求意味着我不能将签名更改为使用参数注入
所以问题是,有没有一种方法可以使用“直接”引用样式引用complexBeanByParameters
# 1 楼答案
也许您可以使用分隔符来引用它:
例如autowire: