ComponentScan与excludeFilters简介
@CompentScan 注解配置需要扫描的包
excludeFilters 是其中一个配置项,用于排除不需要扫描的类
FilterType
- ANNOTATION
根据注解来排除
- ASSIGNABLE_TYPE
根据类类型来排除
- ASPECTJ
根据AspectJ表达式来排除
- REGEX
根据正则表达式来排除
- CUSTOM
自定义FilterClass排除,需要实现
org.springframework.core.type.filter.TypeFilter
接口
应用场景
比如我们在引用一个第三方包的时候,我们只想使用其中一部分,另一部分并不像使用,如:不想使用redis。这时候如果我们就可以使用这个注解来进行过滤。当然这里要注意,一定要把所有使用到redis的地方都过滤掉,否则就可能出现以下异常:
A component required a bean of type 'com.xxxx.xxx' that could not be found
示例:
这里使用到了正则与类的类型方式来进行过滤。
@ComponentScan(
excludeFilters ={ @ComponentScan.Filter(type = FilterType.REGEX, pattern = {"com\\.demo\\.cloud\\.redis\\..*"}),
@ComponentScan.Filter(type = FilterType.REGEX, pattern = "com\\.demo\\.cloud\\.test\\.service\\..*"),
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {UserManagerService.class})
})