问题 Spring - @Primary对@ComponentScan失败了吗?


对于一个简单的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);
    }
}

打印出来 Primary Bean!! 但它回来了 Secondary ComponentScan?? 代替...

怎么来的?文档没有 @主 说它对组件扫描的bean失败了!


7232
2017-07-30 11:03


起源



答案:


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

修复只是给其中一个不同的名称,你应该看到正确的行为 @Primary 豆子被注射了。

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

要么

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

16
2017-08-01 09:00



你救了我的命! = p - Danilo Gomes


答案:


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

修复只是给其中一个不同的名称,你应该看到正确的行为 @Primary 豆子被注射了。

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

要么

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

16
2017-08-01 09:00



你救了我的命! = p - Danilo Gomes