“个人资料”中的春豆混乱了

时间:2016-07-21 21:39:06

标签: java spring spring-boot

spring boot:1.4.0.RC1

我遇到的问题是,如果您的应用程序中定义了一些@Bean方法,并且您希望覆盖具有测试配置文件@Configuration的方法{ {1}}测试配置文件中的bean永远不会被加载,除非您从应用程序中删除它们,即默认配置文件。

我不知道为什么会这么乱,肯定应该有某种配置文件首选项加载?

与使用默认值一样,除非使用特定的配置文件定义了bean,否则请改用它们。

如果您对配置文件使用@Profile("test")注释,但如果将@Component与@Bean注释结合使用,它似乎会有所帮助。这看起来像个黑客。

我试图摆脱使用组件扫描作为策略,因为它很难管理,而是我们为每个配置文件创建配置类,我们会有一些应用程序中应该可覆盖的默认值

任何关于春天的autowire噩梦的帮助都会有很大的帮助

1 个答案:

答案 0 :(得分:0)

由于您使用的是1.4.0.RC1,因此对于测试方案,您可以尝试新的mocking and spying beans功能,例如:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {

    @MockBean
    private RemoteService remoteService;

    @Autowired
    private Reverser reverser;

    @Test
    public void exampleTest() {
        // RemoteService has been injected into the reverser bean
        given(this.remoteService.someCall()).willReturn("mock");
        String reverse = reverser.reverseSomeCall();
        assertThat(reverse).isEqualTo("kcom");
    }
}

条件test配置文件包含大量测试bean的配置类不是一个好主意,并且很难链接到测试用例本身。

对于除测试之外的其他情况,您可以像Spring Boot一样初始化默认和可重写的bean。在AutoConfiguration中配置它们,@Configuration s的优先级通常低于@ConditionalOnMissingBean类,并使用{{1}}等条件注释进行注释。