此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10Spring中文文档

测试中的 Bean 覆盖是指通过注释测试类中的一个或多个字段来覆盖 for 测试类中的特定 Bean 的能力。ApplicationContextSpring中文文档

此功能旨在作为注册实践的风险较小的替代方案 标志设置为 的 Bean Via 。@BeanDefaultListableBeanFactorysetAllowBeanDefinitionOverridingtrue

Spring TestContext 框架提供了两组用于 Bean 覆盖的注解。Spring中文文档

前者完全依赖于 Spring,而后者则依赖于 Mockito 第三方库。Spring中文文档

此功能旨在作为注册实践的风险较小的替代方案 标志设置为 的 Bean Via 。@BeanDefaultListableBeanFactorysetAllowBeanDefinitionOverridingtrue

自定义 Bean 覆盖支持

上面提到的三个注释建立在元注释和 关联的基础结构,允许定义自定义 Bean 覆盖变体。@BeanOverrideSpring中文文档

要创建自定义 Bean 覆盖支持,需要满足以下条件:Spring中文文档

Spring TestContext 框架包括以下 API 的实现,这些 API 支持 Bean 覆盖,并负责设置其余的基础结构。Spring中文文档

该模块注册后两者的实现 ( 和 ) 在其 META-INF/spring.factories 属性文件中spring-testBeanOverrideContextCustomizerFactoryBeanOverrideTestExecutionListenerSpring中文文档

Bean 覆盖的基础结构在测试类中搜索任何元注释的字段 with 并实例化相应的 负责注册适当的.@BeanOverrideBeanOverrideProcessorOverrideMetadataSpring中文文档

然后,内部使用该信息进行更改 测试通过注册和替换定义的 Bean 定义 通过相应的:BeanOverrideBeanFactoryPostProcessorApplicationContextBeanOverrideStrategySpring中文文档

  • REPLACE_DEFINITION:替换 Bean 定义。如果 相应的 Bean 定义不存在。Spring中文文档

  • REPLACE_OR_CREATE_DEFINITION:替换 Bean 定义(如果存在)。创建一个 如果不存在相应的 Bean 定义,则为 New Bean 定义。Spring中文文档

  • WRAP_BEAN:检索原始 Bean 实例并对其进行包装。Spring中文文档

与 Spring 的自动布线机制(例如,字段的解析)相比,TestContext 框架中的 bean 覆盖基础结构有限 它可以执行启发式方法来定位 Bean。要么可以计算 要覆盖的 Bean 的名称,或者可以明确选择它,给定 带注释的字段及其限定注释。@AutowiredBeanOverrideProcessorSpring中文文档

通常,Bean 由 . 或者,用户可以直接在自定义注释中提供 Bean 名称。BeanOverrideFactoryPostProcessorSpring中文文档

某些实现还可以在内部计算 Bean 名称 基于约定或其他高级方法。BeanOverrideProcessorSpring中文文档

与 Spring 的自动布线机制(例如,字段的解析)相比,TestContext 框架中的 bean 覆盖基础结构有限 它可以执行启发式方法来定位 Bean。要么可以计算 要覆盖的 Bean 的名称,或者可以明确选择它,给定 带注释的字段及其限定注释。@AutowiredBeanOverrideProcessorSpring中文文档

通常,Bean 由 . 或者,用户可以直接在自定义注释中提供 Bean 名称。BeanOverrideFactoryPostProcessorSpring中文文档

某些实现还可以在内部计算 Bean 名称 基于约定或其他高级方法。BeanOverrideProcessorSpring中文文档