混合使用 XML、Groovy 脚本和组件类
有时,可能希望混合使用 XML 配置文件、Groovy 脚本和组件类(通常是 @Configuration
类)来为你的测试配置 ApplicationContext
。例如,如果在生产环境中使用 XML 配置,你可能决定在测试中使用 @Configuration
类来配置特定的 Spring 管理的组件,反之亦然。
此外,一些第三方框架(如 Spring Boot)提供了对同时从不同类型的资源(例如,XML 配置文件、Groovy 脚本和 @Configuration
类)加载 ApplicationContext
的一流支持。历史上,Spring 框架并未在标准部署中支持这一点。因此,Spring 框架在 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 资源位置,或者一组 @Configuration
类,从中加载生产环境的 ApplicationContext
,但你仍然可以自由地包含或导入另一种类型的配置。