Spring @ComponentScan多excludeFilters配置:Spring Boot最新版如何排除多包正则
如何在Spring Boot的@ComponentScan中排除多个包匹配模式
嘿,这个需求很常见,我来给你一步步说清楚怎么配置~
你现在的配置已经用了单个正则排除,要添加多个排除规则其实很简单,因为@ComponentScan的excludeFilters属性本身就是一个数组,同时@Filter的pattern参数也是字符串数组,所以有两种灵活的方式可以实现:
方式一:添加多个@Filter注解
直接在excludeFilters里放多个@Filter实例,每个对应一个排除的正则模式,代码示例如下:
@ComponentScan( basePackages = "com.data", excludeFilters = { @ComponentScan.Filter(type = FilterType.REGEX, pattern = "package.*"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.data.legacy.*"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.data.testutils.*") } )
这种方式的好处是,如果后续需要给不同的排除规则设置不同的FilterType(比如有的用正则,有的用注解类型),扩展起来更方便。
方式二:在单个@Filter中传入多个pattern值
因为pattern本身支持字符串数组,所以也可以把所有要排除的正则模式放在同一个@Filter里,写法更简洁:
@ComponentScan( basePackages = "com.data", excludeFilters = @ComponentScan.Filter( type = FilterType.REGEX, pattern = {"package.*", "com.data.legacy.*", "com.data.testutils.*"} ) )
这种方式适合所有排除规则都是同一种FilterType的场景,代码看起来更紧凑。
两种方式的效果完全一致,你可以根据自己的代码风格选择。另外要注意,最新版的Spring Boot(3.x及以上)对这些注解的用法没有改动,完全兼容这种配置方式,放心用就行~
内容的提问来源于stack exchange,提问作者Prostitutor
相关产品推荐
相关产品推荐

