Spring 引导:自动配置的工作原理和@JsonTest

Spring Boot : how auto configure works and @JsonTest

我读过一些关于自动配置如何在幕后工作的东西(配置 类 和 @Conditionalspring.factories/META-INF 等...)

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

我可以看到这个注释被注释了 @AutoConfigureJson

这个 @AutoConfigureJson 到底做了什么?它会导入一些配置 类 里面有 beans 吗? Spring 如何知道如何使用这个注解(基本上这个注解几乎是空的,没有说明要扫描哪个 类)

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

切片仅将应用程序的一个子集加载到您的测试中,从而使它们 运行 更快。假设您需要测试使用 Jackson Object Mapper 的组件,那么您将需要 @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 will do its magic and read the necessary information from here.

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