Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SpringJava配置引用具有依赖项的bean_Java_Spring_Spring Java Config - Fatal编程技术网

使用SpringJava配置引用具有依赖项的bean

使用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() {

在以下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()));
    }
}
如何引用
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;