Spring配置中,classpath*:*.xml的通配符路径如何设置XML文件?
- 内容介绍
- 相关推荐
本文共计946个文字,预计阅读时间需要4分钟。
不能。它只匹配类路径下的所有jar包和目录中顶层的xml文件,不递归子目录,也不扫描jar内的嵌套路径(例如:
常见错误现象:classpath\*:\*.xml 在 IDE 里跑得通,打包成 jar 后却加载不到配置——因为 IDE 的 classpath 是展开的目录结构,而 jar 包里文件是扁平 ZIP 条目,\*.xml 只匹配根层级。
-
classpath\*:表示“遍历所有 classpath 元素”(每个 jar、每个 classes 目录都算一个) -
\*.xml是 Ant 风格通配符,只匹配当前路径下的直接文件,不进子目录 - Spring 实际调用的是
ResourcePatternResolver,底层依赖ClassLoader.getResources("")获取路径前缀,再做字符串匹配
想加载 META-INF/spring/ 下的 XML 怎么写?
必须显式写出路径层级,classpath\*:META-INF/spring/*.xml 才行。注意这里不是正则,* 仅代表“当前目录下任意文件名”,不能跨级。
使用场景:多模块项目中,各 starter 自带自动装配配置,统一放在 META-INF/spring/ 下,主应用靠这个通配加载。
本文共计946个文字,预计阅读时间需要4分钟。
不能。它只匹配类路径下的所有jar包和目录中顶层的xml文件,不递归子目录,也不扫描jar内的嵌套路径(例如:
常见错误现象:classpath\*:\*.xml 在 IDE 里跑得通,打包成 jar 后却加载不到配置——因为 IDE 的 classpath 是展开的目录结构,而 jar 包里文件是扁平 ZIP 条目,\*.xml 只匹配根层级。
-
classpath\*:表示“遍历所有 classpath 元素”(每个 jar、每个 classes 目录都算一个) -
\*.xml是 Ant 风格通配符,只匹配当前路径下的直接文件,不进子目录 - Spring 实际调用的是
ResourcePatternResolver,底层依赖ClassLoader.getResources("")获取路径前缀,再做字符串匹配
想加载 META-INF/spring/ 下的 XML 怎么写?
必须显式写出路径层级,classpath\*:META-INF/spring/*.xml 才行。注意这里不是正则,* 仅代表“当前目录下任意文件名”,不能跨级。
使用场景:多模块项目中,各 starter 自带自动装配配置,统一放在 META-INF/spring/ 下,主应用靠这个通配加载。

