1

Bean の注入を、自動的に検出された Bean のリストと見なします。同じインターフェースを実装するいくつかの Bean を導入し、それらすべてを後の Bean の List として注入します。

この機能に関連する公式ドキュメントを見つけることができませんでした。私の単一のソースはhttp://www.coderanch.com/t/605509/Spring/Java-config-autowired-Listです

この機能を考慮すると、Bean のオーバーリングに問題があります。検出された Bean のリストで定義された Bean を使用して、引数なしのメソッドで定義された Bean をオーバーライドしたいと考えています。ただし、Spring は 2 番目の 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

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 に答える