java - Spring XML 中的 "classpath:"和 "classpath:/"有什么区别?

标签 java spring classpath

我正在处理一些 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/

相关文章:

java - Log4j 显示包名

java - 如何在Spring中从不同位置正确加载多个属性文件?

spring - 为什么我的 Spring 3 Validator 验证模型上的所有内容?

java - 迁移 Ant Gradle - Eclipse 中的类路径和构建路径问题

classpath - 使用 'classpath:' 从 Jython 中的类路径加载资源

java - 在同一 block 中调用方法两次。为什么?

java - Java中如何用逗号和空格分割表达式?

java - 如何告诉 Hibernate 在运行 JUnit 测试时不要存储数据?

java - java中的类路径变量

java - 无法启动第二个 Activity ( list 问题)