混合使用 XML、Groovy 指令碼和元件類
有時可能需要混合使用 XML 配置檔案、Groovy 指令碼和元件類(通常是 `@Configuration` 類)來為測試配置 `ApplicationContext`。例如,如果在生產環境中使用 XML 配置,您可能決定在測試中使用 `@Configuration` 類來配置特定的 Spring 管理的元件,反之亦然。此外,一些第三方框架(如 Spring Boot)提供了一流的支援,可以同時從不同型別的資源(例如,XML 配置檔案、Groovy 指令碼和 `@Configuration` 類)載入 `ApplicationContext`。
Spring Framework 在歷史上並不支援標準部署的這種做法。因此,Spring Framework 在 `spring-test` 模組中提供的大多數 `SmartContextLoader` 實現都只支援每種測試上下文的一種資源型別。然而,這並不意味著您不能同時使用兩者。一般規則的一個例外是 `GenericGroovyXmlContextLoader` 和 `GenericGroovyXmlWebContextLoader` 同時支援 XML 配置檔案和 Groovy 指令碼。此外,第三方框架可能會選擇透過 `@ContextConfiguration` 支援同時宣告 `locations` 和 `classes`,並且藉助 TestContext 框架中的標準測試支援,您有以下選項。
如果您想使用資源位置(例如,XML 或 Groovy)和 `@Configuration` 類來配置您的測試,您必須選擇其中一個作為入口點,並且該入口點必須包含或匯入另一個。例如,在 XML 或 Groovy 指令碼中,您可以使用元件掃描或將它們定義為普通的 Spring Bean 來包含 `@Configuration` 類,而在 `@Configuration` 類中,您可以使用 `@ImportResource` 匯入 XML 配置檔案或 Groovy 指令碼。請注意,這種行為在語義上等同於您在生產環境中配置應用程式的方式:在生產配置中,您可以定義一組 XML 或 Groovy 資源位置,或者一組用於載入生產環境 `ApplicationContext` 的 `@Configuration` 類,但您仍然可以自由地包含或匯入其他型別的配置。