春天-@Primary对@ComponentScan失败?

ManRow:

对于简单的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??...

怎么会?@Primary的文档在任何地方都没有说过针对组件扫描的Bean失败!

Biju Kunjummen:

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

解决方法是简单地给其中一个使用不同的名称,并且您应该看到@Primary注入Bean 的正确行为

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

要么

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章