gpt4 book ai didi

java - Java Web 应用程序中的所有资源都应该唯一命名吗?

转载 作者:行者123 更新时间:2023-11-30 09:55:07 25 4
gpt4 key购买 nike

试图了解 java 领域的资源。我相信以下内容是正确的:

  • 通过类路径加载的资源没有命名空间,它们只有一个文件名。
  • 最明智的做法是始终通过类路径加载资源,永远不要通过文件系统加载资源,即使在单元测试中也是如此。

因此,资源必须始终具有唯一的文件名,否则会发生冲突。

我的假设或结论是否存在缺陷?

最佳答案

Assumption 1) Resources loaded via the classpath have no namespace, they only have a file name.

从类路径加载的资源实际上是由路径名标识的,而不是简单的文件名。您可以将路径名的目录部分视为形成 namespace 。

此外,如果您使用 Class.getResourceAsStream(String pathname) 加载,不以“/”开头的路径名将被解释为相对于类包的路径名。

类路径机制的工作原理是在类路径上覆盖每个 JAR 文件的 namespace 等。因此,您可以在具有相同路径名的不同 JAR 中拥有多个资源,但实际上只有一个资源是可见的。 (您稍后将其描述为“冲突”。)但是从可见路径名集的角度来看,每个路径名都唯一标识一个资源。

Assumption 2) It's wisest to always load resources via the classpath, never via the file system, even in unit tests.

如果我们谈论的是应用程序的资源,那么从类路径加载具有明确的优势。但是,如果我们谈论的是由应用程序创建和管理的资源,那么通过类路径加载就会出现问题……因为您无法资源写入类路径。

此外,即使澄清了“资源”的含义,我认为说通过类路径加载资源始终是最明智的说法也不正确。我们不可能预测所有场景/用例,因此不能说在某些场景/用例中最明智的方法是加载资源另一种方式。 (但是,如果您说“通常”或“通常”而不是“总是”,我会同意这个假设。)

Conclusion 3) Therefore, resources must always have unique file names, or collisions will occur.

如果来自类路径上不同 JAR 的资源具有非唯一路径名,那么您确实会遇到一种冲突,并且一个或另一个资源将无法加载(至少,不能通过普通的类加载器 API 加载)。但这可能正是您想要发生的事情!

Are there flaws in my assumptions or my conclusion?

  • 假设 1) 从表面上看是错误的,但可以通过一种使其正确的方式重新解释。

  • 结论 3) 在逻辑上源自重新解释的假设 1)。

  • 假设 2) 也是错误的,但可以通过一种使其正确的方式重新解释:即“始终”放松,并定义“资源”的含义。然而,这个假设在逻辑上并不是结论所必需的。

关于java - Java Web 应用程序中的所有资源都应该唯一命名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2982570/

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