使用上下文初始化器进行上下文配置
要通过使用上下文初始化器为测试配置 ApplicationContext
,请使用 @ContextConfiguration
注解您的测试类,并配置 initializers
属性,使其包含一个数组,该数组引用实现 ApplicationContextInitializer
的类。然后,声明的上下文初始化器将用于初始化为您的测试加载的 ConfigurableApplicationContext
。请注意,每个声明的初始化器支持的具体 ConfigurableApplicationContext
类型必须与正在使用的 SmartContextLoader
创建的 ApplicationContext
类型兼容(通常是 GenericApplicationContext
)。此外,初始化器的调用顺序取决于它们是否实现了 Spring 的 Ordered
接口,或者是否使用 Spring 的 @Order
注解或标准 @Priority
注解进行了注解。以下示例展示了如何使用初始化器:
- Java
-
@ExtendWith(SpringExtension.class) // ApplicationContext will be loaded from TestConfig // and initialized by TestAppCtxInitializer @ContextConfiguration( classes = TestConfig.class, initializers = TestAppCtxInitializer.class) [id="CO1-1"][id="CO1-1"][id="CO1-1"](1) class MyTest { // class body... }
<1> 使用配置类和初始化器指定配置。
- Kotlin
-
@ExtendWith(SpringExtension::class) // ApplicationContext will be loaded from TestConfig // and initialized by TestAppCtxInitializer @ContextConfiguration( classes = [TestConfig::class], initializers = [TestAppCtxInitializer::class]) [id="CO2-1"][id="CO1-2"][id="CO2-1"](1) class MyTest { // class body... }
<1> 使用配置类和初始化器指定配置。
您还可以完全省略 @ContextConfiguration
中 XML 配置文件、Groovy 脚本或组件类的声明,而只声明 ApplicationContextInitializer
类,这些类负责在上下文中注册 Bean——例如,通过编程方式从 XML 文件或配置类加载 Bean 定义。以下示例展示了如何实现:
- Java
-
@ExtendWith(SpringExtension.class) // ApplicationContext will be initialized by EntireAppInitializer // which presumably registers beans in the context @ContextConfiguration(initializers = EntireAppInitializer.class) [id="CO3-1"]1 class MyTest { // class body... }
<1> 仅使用初始化器指定配置。
- Kotlin
-
@ExtendWith(SpringExtension::class) // ApplicationContext will be initialized by EntireAppInitializer // which presumably registers beans in the context @ContextConfiguration(initializers = [EntireAppInitializer::class]) [id="CO4-1"][id="CO1-3"][id="CO4-1"](1) class MyTest { // class body... }
<1> 仅使用初始化器指定配置。