Man*_*Row 11 java testing configuration spring 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 String toString()
{
return string;
}
}
Run Code Online (Sandbox Code Playgroud)
和这个配置
@Configuration
@ComponentScan(basePackageClasses = Foo.class)
public class TestConfiguration
{
@Primary
@Bean
public Foo foo()
{
return new Foo("Primary bean!!");
}
}
Run Code Online (Sandbox Code Playgroud)
我期待以下测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfiguration.class)
public class Test
{
@Autowired
private Foo foo;
@Test
public void test()
{
System.out.println(foo);
}
}
Run Code Online (Sandbox Code Playgroud)
打印出来,Primary Bean!!但它返回Secondary ComponentScan??...
Bij*_*men 17
原因是这两个bean实际上具有相同的名称foo,因此内部的一个bean定义被另一个bean覆盖,实际上@Bean是被扫描的那个被覆盖的bean定义@ComponentScan.
修复只是给它们中的一个不同的名称,你应该看到@Primary注入的bean 的正确行为.
@Primary
@Bean
public Foo foo1()
{
return new Foo("Primary bean!!");
}
Run Code Online (Sandbox Code Playgroud)
要么
@Component("foo1")
public class Foo
{
..
Run Code Online (Sandbox Code Playgroud)