我正在处理一些 Spring XML 配置文件,有时它们使用 "classpath:/datasource.xml"
,有时使用 "classpath:datasource.xml"
。两者有区别还是前导 /
是可选的/隐含的/多余的?
最佳答案
我看不出这两者有什么区别。您将看到的最大区别是类路径位置上的相对路径和 *
这里是 Spring Resources 的摘录,查找第 4.7.2.2 节
类路径*:
“classpath*:”前缀还可以与位置路径的其余部分中的 PathMatcher 模式组合,例如“classpath*:META-INF/*-beans.xml”。在这种情况下,解析策略相当简单:在最后一个非通配符路径段上使用 ClassLoader.getResources() 调用来获取类加载器层次结构中的所有匹配资源,然后对每个资源使用相同的 PathMatcher 解析策略上述用于通配符子路径。
这意味着像 "classpath*:*.xml" 这样的模式不会从 jar 文件的根目录中检索文件,而只会从扩展目录的根目录中检索文件。这源于 JDK 的 ClassLoader.getResources() 方法的限制,该方法仅返回传入空字符串的文件系统位置(指示要搜索的潜在根)。
关于java - Spring XML 中的 "classpath:"和 "classpath:/"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13994840/