对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cadn.net.cn

使用上下文定制器进行配置配置

一个ContextCustomizer负责定制提供的ConfigurableApplicationContext在 Bean 定义被加载到上下文中之后 但在刷新上下文之前。spring-doc.cadn.net.cn

一个ContextCustomizerFactory负责创建一个ContextCustomizer基于 一些自定义逻辑,用于确定ContextCustomizer对于给定的 test 类 — 例如,基于某个 annotation 的存在。工厂是 在ContextLoaders已处理测试的上下文配置属性 类,但在MergedContextConfiguration已创建。spring-doc.cadn.net.cn

例如,Spring Framework 提供了以下内容ContextCustomizerFactoryimplementation 中,默认情况下已注册:spring-doc.cadn.net.cn

MockServerContainerContextCustomizerFactory

创建一个MockServerContainerContextCustomizer如果 Classpath 中存在 WebSocket 支持 并且测试类或其封闭类之一带有@WebAppConfiguration.MockServerContainerContextCustomizer实例化一个新的MockServerContainer并将其存储在ServletContext在名为jakarta.websocket.server.ServerContainer.spring-doc.cadn.net.cn

注册ContextCustomizerFactory实现

您可以注册ContextCustomizerFactoryimplementation 的 子类及其嵌套类。@ContextCustomizerFactories注解。请参阅注释支持和 javadoc 以获取@ContextCustomizerFactories了解详细信息和示例。spring-doc.cadn.net.cn

自动发现默认ContextCustomizerFactory实现

注册ContextCustomizerFactory使用@ContextCustomizerFactories是 适用于在有限测试场景中使用的自定义工厂。但是,它可以 如果需要在整个测试套件中使用自定义工厂,则会变得很麻烦。这 此问题已通过支持自动发现默认得到解决ContextCustomizerFactory通过SpringFactoriesLoader机制。spring-doc.cadn.net.cn

例如,构成 Spring Framework 和 Spring 中 testing 支持的模块 引导声明所有核心默认值ContextCustomizerFactoryimplementation 在org.springframework.test.context.ContextCustomizerFactoryMETA-INF/spring.factoriesproperties 文件。这spring.factories文件spring-test模块可以在这里查看。 第三方框架和开发人员可以贡献自己的框架ContextCustomizerFactory实现以相同的方式添加到默认工厂列表中spring.factories文件。spring-doc.cadn.net.cn

合并ContextCustomizerFactory实现

如果自定义ContextCustomizerFactory通过@ContextCustomizerFactories它 将与使用上述自动发现机制注册的默认工厂合并spring-doc.cadn.net.cn

合并算法可确保从列表中删除重复项,并且在本地 合并时,声明的工厂将附加到默认工厂列表中。spring-doc.cadn.net.cn

替换测试类、其子类及其嵌套的默认工厂 类,您可以设置mergeMode属性@ContextCustomizerFactoriesMergeMode.REPLACE_DEFAULTS.spring-doc.cadn.net.cn