1

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

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

考虑到这个特性,我有一个 Bean overring 的问题:我想用一个用检测到的 bean 列表定义的 bean 覆盖一个通过 no-arg 方法定义的 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";
        }

    }

}

如果这是预期的行为,我怎样才能实现这样的压倒一切?

4

2 回答 2

1
  1. 列表 autowire 的文档可以在 spring文档中找到

  2. 通过 id 或 name 覆盖 beans 不是官方的 spring 功能-查找该问题以获取更多详细信息

于 2013-10-15T12:19:58.393 回答
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 源)

于 2013-11-04T08:02:19.270 回答