如何在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
相关产品推荐
相关产品推荐

