Spring XML中“classpath:”和“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()方法中的限制,该方法仅返回传入的空字符串的文件系统位置(指示搜索的潜在根)。