17

我正在处理一些 Spring XML 配置文件,有时它们使用"classpath:/datasource.xml",有时"classpath:datasource.xml". 两者之间有区别还是领先的/可选/隐含/冗余?

4

1 回答 1

20

我看不出这两者有什么区别。您将看到的最大区别是类路径位置上的相对路径和 *

这是Spring Resources的摘录,查找第 4.7.2.2 节

Classpath*:
“classpath*:”前缀也可以与位置路径的其余部分中的 PathMatcher 模式组合,例如“classpath*:META-INF/*-beans.xml”。在这种情况下,解析策略相当简单:在最后一个非通配符路径段上使用 ClassLoader.getResources() 调用来获取类加载器层次结构中的所有匹配资源,然后对每个资源使用相同的 PathMatcher 解析策略上述用于通配符子路径。

这意味着像"classpath*:*.xml"这样的模式不会从 jar 文件的根目录中检索文件,而只会从扩展目录的根目录中检索文件。这源于 JDK 的 ClassLoader.getResources() 方法的限制,该方法仅返回传入空字符串的文件系统位置(指示要搜索的潜在根)。

于 2012-12-21T18:11:00.380 回答