2

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

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

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

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

4

1 回答 1

2

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

切片仅将应用程序的一个子集加载到您的测试中,从而使它们运行得更快。假设您需要测试一个使用 Jackson Object Mapper 的组件,那么您将需要@JsonTest切片。(这里是所有可用切片的列表。)

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

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

@JsonTest
@AutoConfigureDataJpa
class MyTests {
// tests
}

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

loadFactoryNames 方法将发挥它的魔力并从这里读取必要的信息。

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

于 2021-03-02T19:21:09.543 回答