gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:29:42 27 4
gpt4 key购买 nike

使用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 {...}

或者

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

由于这些测试类最终出现在类路径上,因此它们还可以通过被检测并用作 Spring 配置来偷偷地影响其他测试。

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

最佳答案

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

  • 配置应该只扫描同一模块中的包
  • configuratino 应该只扫描它自己的包或子包

否则,使用 @Import 来定位另一个配置似乎要好得多。它使意图和依赖性更加明确,并有助于避免类路径问题。

关于java - 避免对 Spring 配置类进行类路径扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26282348/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com