使用 Context Initializers 進行 Context 配置
若要使用 Context Initializers 為您的測試配置 ApplicationContext
,請使用 @ContextConfiguration
註解您的測試類別,並使用包含實作 ApplicationContextInitializer
類別參考的陣列來配置 initializers
屬性。宣告的 Context Initializers 接著會用於初始化為您的測試載入的 ConfigurableApplicationContext
。請注意,每個宣告的 initializer 所支援的具體 ConfigurableApplicationContext
類型,必須與正在使用的 SmartContextLoader
(通常為 GenericApplicationContext
) 所建立的 ApplicationContext
類型相容。此外,initializer 的調用順序取決於它們是否實作 Spring 的 Ordered
介面,或者是否使用 Spring 的 @Order
註解或標準 @Priority
註解進行註解。以下範例示範如何使用 Initializers
-
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 | 透過使用配置類別和 initializer 來指定配置。 |
@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 | 透過使用配置類別和 initializer 來指定配置。 |
您也可以完全省略 @ContextConfiguration
中 XML 配置檔案、Groovy 腳本或組件類別的宣告,而改為僅宣告 ApplicationContextInitializer
類別,這些類別接著負責在 Context 中註冊 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 | 僅使用 initializer 來指定配置。 |
@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 | 僅使用 initializer 來指定配置。 |