Javaconfig bean覆盖失败并注入了List

时间:2013-10-15 09:34:24

标签: java spring

我认为将bean注入自动检测到的bean列表:我介绍了几个实现相同接口的bean,并将它们作为List注入后面的bean中。

我无法找到与此功能相关的官方文档。我的单一来源是http://www.coderanch.com/t/605509/Spring/Java-config-autowired-List

考虑到这个特性,我遇到了Bean overring的问题:我想覆盖一个通过no-arg方法定义的bean,其中bean使用List of detected bean定义。但是,spring表现得像第二个bean定义不存在。

可以通过以下测试复制:

import java.util.Date;
import java.util.List;

import org.junit.Assert;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

public class SpringTest {

    @Test
    public void shouldtestSpringDifferentMethodNames() {
        AnnotationConfigApplicationContext ctx2 = new AnnotationConfigApplicationContext(AConfig.class, CConfig.class);
        Assert.assertEquals("overriden", ctx2.getBean("bean"));
    }

    @Configuration
    public static class AConfig {

        @Bean
        public Object bean() {
            return "not overriden";
        }

    }

    @Configuration
    public static class CConfig extends AConfig {

        @Bean
        public Date anotherBean() {
            return new Date();
        }

        @Bean
        public Object bean(List<? extends Date> someDate) {
            return "overriden";
        }

    }

}

如果这是预期的行为,我怎样才能实现这样的重写?

2 个答案:

答案 0 :(得分:1)

  1. 列表autowire的文档可在春季documentation找到

  2. 按ID或名称覆盖bean不是官方弹簧功能 - 请查看question以获取更多详细信息

答案 1 :(得分:0)

Spring团队认为这是一个错误:https://jira.springsource.org/browse/SPR-10988

最近的一份文件可以在http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-autowired-annotation找到(感谢Alexander Kudrevatykh为2.5来源)