gpt4 book ai didi

java - Spring - @Primary 对 @ComponentScan 失败?

转载 作者:IT老高 更新时间:2023-10-28 13:46:14 25 4
gpt4 key购买 nike

对于一个简单的 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 失败了!

最佳答案

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

解决方法是简单地给其中一个命名,您应该会看到注入(inject) @Primary bean 的正确行为。

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

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

关于java - Spring - @Primary 对 @ComponentScan 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17945290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com