使用SpringJava配置引用具有依赖项的bean
在以下Spring Java配置中:使用SpringJava配置引用具有依赖项的bean,java,spring,spring-java-config,Java,Spring,Spring Java Config,在以下Spring Java配置中: @Configuration @EnableAutoConfiguration @ComponentScan("my.package") public class Config { @Bean public BasicBean basicBean1() { return new BasicBean("1"); } @Bean public BasicBean basicBean2() {
@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()));
}
}
如何引用complexBeanByParameters
,而不必指定complexBeanRegistry
的依赖项列表?老实说,后者应该完全忘记
有一个选择就是直接使用
public ComplexBeanRegistry complexBeanRegistry(List<ComplexBeans> complexBeans) {...}
公共ComplexBeanRegistry ComplexBeanRegistry(列出complexBeans){…}
当然,但在某些情况下,这可能不是一个选项,特别是在使用spring上下文中的CacheConfigurer
时。在本例中,Java配置旨在
创建bean
通过实现CacheConfigurer
,覆盖CacheManager
和KeyGenerator
bean的默认实例
实现CacheConfigurer
的要求意味着我不能将签名更改为使用参数注入
所以问题是,有没有一种方法可以使用“直接”引用样式引用complexBeanByParameters
?也许您可以使用分隔符引用它:
@Bean
@Qualifier("complexBeanParam")
public ComplexBean complexBeanByParameters(List<BasicBean> basicBeans) {
return new ComplexBean(basicBeans);
}
@Bean
@Qualifier("complexBeanRef")
public ComplexBean complexBeanByReferences() {
return new ComplexBean(Arrays.asList(basicBean1(), basicBean2()));
}
我当前的解决方案是将我的配置拆分为单独的文件,并通过从一个配置自动连接bean,将它注入到CacheConfigurer
bean声明中——类似的做法是在单独的配置中声明complexBeanRegistry
,并自动连接complexBeanByParameters
bean。这似乎确实是最接近我想要做的事情。
@Bean
@Qualifier("complexBeanParam")
public ComplexBean complexBeanByParameters(List<BasicBean> basicBeans) {
return new ComplexBean(basicBeans);
}
@Bean
@Qualifier("complexBeanRef")
public ComplexBean complexBeanByReferences() {
return new ComplexBean(Arrays.asList(basicBean1(), basicBean2()));
}
@Autowired
@Qualifier("complexBeanParam")
private ComplexBean beanParam;