在下面的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