使用 Context Initializer 進行上下文配置

要使用上下文初始化器為測試配置 ApplicationContext,請使用 @ContextConfiguration 註解您的測試類,並使用包含實現 ApplicationContextInitializer 的類的引用陣列配置 initializers 屬性。然後,宣告的上下文初始化器將用於初始化為您的測試載入的 ConfigurableApplicationContext。請注意,每個宣告的初始化器所支援的具體 ConfigurableApplicationContext 型別必須與正在使用的 SmartContextLoader 建立的 ApplicationContext 型別相容(通常是 GenericApplicationContext)。此外,初始化器被呼叫的順序取決於它們是否實現了 Spring 的 Ordered 介面,或者是否用 Spring 的 @Order 註解或標準 @Priority 註解進行了標註。以下示例展示瞭如何使用初始化器。

  • Java

  • Kotlin

@ExtendWith(SpringExtension.class)
// ApplicationContext will be loaded from TestConfig
// and initialized by TestAppCtxInitializer
@ContextConfiguration(
	classes = TestConfig.class,
	initializers = TestAppCtxInitializer.class) (1)
class MyTest {
	// class body...
}
1 使用配置類和初始化器指定配置。
@ExtendWith(SpringExtension::class)
// ApplicationContext will be loaded from TestConfig
// and initialized by TestAppCtxInitializer
@ContextConfiguration(
		classes = [TestConfig::class],
		initializers = [TestAppCtxInitializer::class]) (1)
class MyTest {
	// class body...
}
1 使用配置類和初始化器指定配置。

您還可以完全省略 @ContextConfiguration 中 XML 配置檔案、Groovy 指令碼或元件類的宣告,而只宣告 ApplicationContextInitializer 類,這些類負責在上下文中註冊 Bean——例如,透過程式設計方式從 XML 檔案或配置類載入 Bean 定義。以下示例展示瞭如何做到這一點。

  • Java

  • Kotlin

@ExtendWith(SpringExtension.class)
// ApplicationContext will be initialized by EntireAppInitializer
// which presumably registers beans in the context
@ContextConfiguration(initializers = EntireAppInitializer.class) (1)
class MyTest {
	// class body...
}
1 僅使用初始化器指定配置。
@ExtendWith(SpringExtension::class)
// ApplicationContext will be initialized by EntireAppInitializer
// which presumably registers beans in the context
@ContextConfiguration(initializers = [EntireAppInitializer::class]) (1)
class MyTest {
	// class body...
}
1 僅使用初始化器指定配置。
© . This site is unofficial and not affiliated with VMware.