Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免对Spring配置类进行类路径扫描_Java_Spring_Spring Test - Fatal编程技术网

Java 避免对Spring配置类进行类路径扫描

Java 避免对Spring配置类进行类路径扫描,java,spring,spring-test,Java,Spring,Spring Test,使用Spring,可以使用@Configuration注释的类来配置应用程序的各个方面。这些配置类可以直接导入,也可以使用类路径扫描收集 在我看来,类路径扫描对于配置类尤其有几个缺点。 一个主要的缺点是,对于多个项目(gradle或maven中的子项目),IDE很容易与构建系统在类路径上的内容不一致 特别是在我当前的例子中,gradle将为每个子项目隔离类路径测试资源(src/main/test中的文件),这意味着一个子项目中的测试不会通过类路径扫描从其他子项目测试中找到Spring类(除非指定

使用Spring,可以使用@Configuration注释的类来配置应用程序的各个方面。这些配置类可以直接导入,也可以使用类路径扫描收集

在我看来,类路径扫描对于配置类尤其有几个缺点。 一个主要的缺点是,对于多个项目(gradle或maven中的子项目),IDE很容易与构建系统在类路径上的内容不一致

特别是在我当前的例子中,gradle将为每个子项目隔离类路径测试资源(src/main/test中的文件),这意味着一个子项目中的测试不会通过类路径扫描从其他子项目测试中找到Spring类(除非指定)。然而,IntelliJ(13.1.4)没有进行这种隔离,导致gradle和IntelliJ的测试结果不同。这可能会在任何时候(新的intelliJ或Eclipse版本)再次出现,而与其他任何错误一样,这是一个主要的麻烦

我们面临的另一个问题是Spring为运行测试提供了一个工具包,例如

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class FooTest {...}

由于这些测试类最终位于类路径上,它们还可以通过被检测并用作Spring配置来巧妙地影响其他测试


那么,扫描类路径以查找配置通常是不好的,还是我们缺少了一些明显的缓解措施?

到目前为止,我通常很少使用类路径扫描,遵循以下规则:

  • 配置应仅扫描同一模块中的包
  • configuratino应仅在其自身或子包中进行扫描
否则,使用@Import作为另一个配置的目标似乎要好得多。它使意图和依赖性更加明确,并有助于避免类路径问题

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class FooTest {...}