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

如何在Spring包匹配模式中用通配符匹配含指定子包的路径?

解决Spring注解包匹配的问题

你需要匹配com.mycompany下所有包含repositories子包的路径,包括该包本身、它的子包,以及其他子包下的repositories及其子包。之前用com.mycompany.**.repositories无效,是因为这个模式要求com.mycompany和repositories之间必须有至少一层包,无法匹配直接的com.mycompany.repositories。

正确的Ant风格匹配模式是com.mycompany.**repositories**,这个模式的作用:

  • **表示任意数量(包括零)的包层级
  • 既能匹配com.mycompany.repositories这种直接的包(前后**均为零层级)
  • 也能匹配com.mycompany.bar.repositories这种嵌套的repositories包(前面**匹配bar)
  • 同时覆盖所有repositories的子包(后面**匹配子包层级)

修改后的测试类代码如下:

@EnableJpaRepositories("com.mycompany.**repositories**")
@EntityScan("com.mycompany.**repositories**")
@ComponentScan("com.mycompany.**repositories**")
@DataJpaTest
class RepositoryTests {
    // tests omitted
}

如果担心模式会误匹配类似com.mycompany.repositoriesxyz这种包含repositories字符串但不是独立包的情况,可以改用多个更精确的模式组合:

@EnableJpaRepositories(basePackages = {
    "com.mycompany.repositories",
    "com.mycompany.repositories.**",
    "com.mycompany.**repositories",
    "com.mycompany.**repositories.**"
})
@EntityScan(basePackages = {
    "com.mycompany.repositories",
    "com.mycompany.repositories.**",
    "com.mycompany.**repositories",
    "com.mycompany.**repositories.**"
})
@ComponentScan(basePackages = {
    "com.mycompany.repositories",
    "com.mycompany.repositories.**",
    "com.mycompany.**repositories",
    "com.mycompany.**repositories.**"
})
@DataJpaTest
class RepositoryTests {
    // tests omitted
}

不过第一种单模式的写法已经能完全覆盖你列出的所有场景,足够满足需求。

内容的提问来源于stack exchange,提问作者Dónal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.04 07:02:32