【问题标题】:Spring Boot : how auto configure works and @JsonTestSpring Boot:自动配置的工作原理和@JsonTest
【发布时间】:2021-05-31 21:13:42
【问题描述】:

我已经阅读了一些关于自动配置如何在幕后工作的内容(@Conditionalspring.factories/META-INF 中的配置类等...)

现在我试图通过一个例子来理解:@JsonTest

我可以看到这个注解带有@AutoConfigureJson之类的注解

@AutoConfigureJson 究竟做了什么?它是否导入了一些带有 bean 的配置类? Spring如何知道如何使用这个注解(基本上这个注解几乎是空的,并没有说要扫描哪些类)

【问题讨论】:

    标签: spring-boot spring-autoconfiguration


    【解决方案1】:

    @AutoConfigure...(如@AutoConfigureJson)注解是允许使用多个“切片”进行测试的方式。

    切片仅将应用程序的一个子集加载到您的测试中,从而使它们运行得更快。假设您需要测试一个使用 Jackson 对象映射器的组件,那么您将需要 @JsonTest 切片。 (这里是all available slices的列表。)

    但您可能还需要在测试中使用框架的其他部分,而不仅仅是单个切片;让我们说JPA层。您可能希望同时使用 @JsonTest 和 @DataJpaTest 注释测试以加载两个切片。 According to the docs,不支持。

    您应该做的是选择@...Test 注释之一,并将另一个包含在@AutoConfigure... 注释中。

    @JsonTest
    @AutoConfigureDataJpa
    class MyTests {
    // tests
    }
    

    更新: 在评估注解的某个时刻,Spring Boot 将点击 this line 并将源传递给方法 SpringFactoriesLoader.loadFactoryNames(),即注解的完全限定名称(例如 interface org.springframework.boot.test.autoconfigure.json.AutoConfigureJson)。

    loadFactoryNames method 会施展魔法并读取必要的信息from here

    如果需要更多详细信息,最好使用调试器并按照所有步骤操作。

    【讨论】:

    • 好的,谢谢。但我对幕后的运作方式很感兴趣。我的意思是:使用 @AutoConfigure... 可能会导入一些类和 bean。这是如何运作的 ? Spring 如何知道要导入哪些 bean 或配置类?
    • 好的,我已经添加了一些更多的细节。
    猜你喜欢
    • 2019-04-21
    • 2015-04-24
    • 2017-01-19
    • 2018-09-09
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2022-07-04
    • 2019-05-03
    相关资源
    最近更新 更多