Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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
Java Spring-@Primary对@ComponentScan失败?_Java_Spring_Testing_Configuration_Spring Test - Fatal编程技术网

Java Spring-@Primary对@ComponentScan失败?

Java Spring-@Primary对@ComponentScan失败?,java,spring,testing,configuration,spring-test,Java,Spring,Testing,Configuration,Spring Test,对于简单的POJO: @Component public class Foo { private final String string; public Foo() { this("Secondary ComponentScan??"); } public Foo(String string) { this.string = string; } @Override public Stri

对于简单的POJO:

@Component
public class Foo
{
    private final String string;

    public Foo()
    {
        this("Secondary ComponentScan??");
    }

    public Foo(String string)
    {
        this.string = string;
    }

    @Override
    public String toString()
    {
        return string;
    }
}
这个配置呢

@Configuration
@ComponentScan(basePackageClasses = Foo.class)
public class TestConfiguration
{
    @Primary
    @Bean
    public Foo foo()
    {
        return new Foo("Primary bean!!");
    }
}
我期待下面的测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfiguration.class)
public class Test
{
    @Autowired
    private Foo foo;

    @Test
    public void test()
    {
        System.out.println(foo);
    }
}
打印出
primarybean但它返回
辅助组件扫描???
而不是


为什么?任何地方的文档都没有说它对组件扫描bean失败

原因是两个bean实际上具有相同的名称
foo
,因此在内部一个bean定义被另一个bean定义覆盖,本质上
@bean
的定义被
@ComponentScan
扫描的定义覆盖

修复方法只是给其中一个取一个不同的名称,您应该看到
@Primary
bean被注入的正确行为

@Primary
@Bean
public Foo foo1()
{
    return new Foo("Primary bean!!");
}

@Component("foo1")
public class Foo
{
..