Oli*_*ver 2 spring spring-bean
我对Spring基于注释的配置感到困惑。
我有一个接口MyInterface和两个实现该接口的类(MyClass1和MyClass2)。
@Component("MyInterface")
public class MyClass1 implements MyInterface {
public void execute() {
System.out.println("MyClass1 executed");
}
}
public class MyClass2 implements MyInterface {
public void execute() {
System.out.println("MyClass2 executed");
}
}
Run Code Online (Sandbox Code Playgroud)
通过使用组件扫描创建MyClass1,将MyClass2定义为bean:
@Configuration
@ComponentScan(basePackageClasses = MyClass1Configuration.class)
public class MyClass1Configuration {
}
@Configuration
public class MyClass2Configuration {
@Bean(name = "MyInterface")
public MyInterface myClass2() {
return new MyClass2();
}
}
Run Code Online (Sandbox Code Playgroud)
我通过使用Spring Test的ContextConfiguration批注来构建应用程序上下文:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {MyClass1Configuration.class, MyClass2Configuration.class})
public class SpringTestCase1 {
@Autowired
private MyInterface myInterface;
@Test
public void testMethod() {
System.out.println("testMethod invoked");
Assert.assertEquals(MyClass2.class, myInterface.getClass());
myInterface.execute();
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,该测试失败,因为自动连接了Class1,而不是Class2。预期的行为是MyClass2Configuration覆盖了MyClass1Configuration定义的bean。我怎么了
我想在GitHub上创建此示例,如果您想看一个工作示例:https : //github.com/OLibutzki/spring-test-configuration/tree/master/simple-sprint-test
谢谢你的帮助。
亲切的问候奥利弗
小智 5
或者您可以使用覆盖它
spring.main.allow-bean-definition-overriding = true
在main / resource / application.properties中
但这容易出错
| 归档时间: |
|
| 查看次数: |
11925 次 |
| 最近记录: |