You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring @Value注解读取classpath资源时通配符使用规则疑问

Spring @Value资源注入通配符规则说明

通配符支持规则

Spring资源路径匹配采用Ant风格规则,并非仅支持单个星号,共支持三类通配符:

  • ?:匹配单个任意字符,不包含目录分隔符/
  • *:匹配0个或多个任意字符,不包含目录分隔符/,仅可匹配同一层级目录下的资源,也就是你常用的根目录批量匹配写法的逻辑
  • **:匹配0个或多个层级的目录,必须作为路径中独立的片段使用,不支持和其他字符拼接在同一路径段(例如a**b.json属于无效写法)

多层通配符生效要求

你之前写的**/**/*.json不生效主要是两个原因:

  1. 前缀配置错误:仅使用classpath:前缀时,默认仅匹配当前类加载器的根路径资源,如果通配符出现在路径开头,仅会扫描当前模块编译后的classes目录,不会扫描依赖Jar包内的资源。如果需要全类路径扫描,需要改用classpath*:前缀。如果是匹配指定根目录下的多层资源,也可以保留classpath:前缀,比如classpath:config/**/*.json可以正常匹配当前类路径config目录下所有层级的json文件。
  2. 通配符冗余:多层连续的**/属于无效冗余写法,Spring路径解析时会出现匹配逻辑异常,匹配任意层级下的.json文件仅需要写**/*.json即可。

正确的多层资源注入示例

如果要读取全类路径下所有层级的json文件,写法如下:

@Value("classpath*:**/*.json")
private Resource[] allJsonFiles;

内容的提问来源于stack exchange,提问作者mdave16

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:36:07