混合使用XML、Groovy脚本和组件类

有时候,混合使用XML配置文件、Groovy脚本和组件类(通常是@Configuration类)来配置测试的ApplicationContext可能是可取的。例如,如果在生产环境中使用XML配置,您可能决定在测试中使用@Configuration类来配置特定的Spring管理组件,反之亦然。

此外,一些第三方框架(如Spring Boot)提供了对同时从不同类型资源(例如XML配置文件、Groovy脚本和@Configuration类)加载ApplicationContext的一流支持。Spring Framework在历史上并未支持标准部署中的这一点。因此,Spring Framework在spring-test模块中提供的大多数SmartContextLoader实现仅支持每个测试上下文的一种资源类型。但这并不意味着您不能同时使用两者。一个例外是GenericGroovyXmlContextLoaderGenericGroovyXmlWebContextLoader同时支持XML配置文件和Groovy脚本。此外,第三方框架可以选择通过@ContextConfiguration支持同时声明locationsclasses,并且在TestContext框架中的标准测试支持下,您有以下选项。

如果您想要使用资源位置(例如XML或Groovy)和@Configuration类来配置您的测试,您必须选择一个作为入口点,并且该入口点必须包含或导入另一个。例如,在XML或Groovy脚本中,您可以通过组件扫描或将它们定义为普通的Spring bean来包含@Configuration类,而在@Configuration类中,您可以使用@ImportResource来导入XML配置文件或Groovy脚本。请注意,这种行为在语义上等同于您在生产环境中配置应用程序的方式:在生产配置中,您定义一组XML或Groovy资源位置或一组@Configuration类,从中加载生产ApplicationContext,但您仍然可以自由地包含或导入另一种类型的配置。