用非主豆覆盖主豆的弹簧
我正在尝试在测试配置中声明的测试期间使用@Primary覆盖Spring Bean。一个声明位于 src/main/java 路径中,另一个(主声明)位于 src/test/java 路径中。
但是,Spring故意用非主豆代替主豆,我不想在测试中使用。如果我只是简单地注释掉了生产(src/main/java)配置bean,它会根据需要在测试配置中使用主测试(src/main/test)bean。(显然,每次我想运行测试时,我都不能注释掉代码。
从日志中:
o.s.b.f.s.DefaultListableBeanFactory - 用不同的定义替换bean 'sqsConnectionFactory'的bean定义:替换[Root bean:class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true;主 = 真;factoryBeanName=testJmsConfiguration;factoryMethodName=sqsConnectionFactory;initMethodName=null;destroyMethodName=(推断);在类路径资源中定义 [com/foo/configuration/TestJmsConfiguration.class]]
跟
[Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true;主要 = 假;factoryBeanName=jmsConfiguration;factoryMethodName=sqsConnectionFactory;initMethodName=null;destroyMethodName=(推断);在类路径资源中定义 [com/foo/configuration/JmsConfiguration.class]]
为什么Spring用非主豆代替主豆,我如何让Spring使用专门标记为主豆的豆子?
编辑:src/main/java 配置:
@Configuration
public class JmsConfiguration {
... other bean declarations here ...
@Bean
public SQSConnectionFactory sqsConnectionFactory(Region region) throws JMSException {
return SQSConnectionFactory.builder()
.withRegion(region)
.build();
}
}
测试配置:
@Configuration
public class TestJmsConfiguration {
@Bean(name="messageProducerMock")
public MessageProducer mockMessageProducer() {
return new MessageProducerMock();
}
... other bean declarations here ...
@Bean
@Primary
public SQSConnectionFactory sqsConnectionFactory(@Qualifier("messageProducerMock") MessageProducer messageProducerMock) throws JMSException {
... returning setup mock here
}
}
带有测试的类用以下方式进行注释:
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles(profiles = {"test"})