SpringBoot中使用@ComponentScan排除指定类 |
问题 ?
在 SpringBoot项目中有时候某些类不需要被 @ComponentScan注解给扫描到, 比如在给某个服务的Ribbon自定义配置类时,为得防止 @Configuration注解的类所在的包与 @ComponentScan扫描的包重叠.
解决 :
使用 @ComponeentScan 的 excludeFilters 属性进行设定我们需要排除的类.
例子 :
@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = 类名.class))
public class 启动类Application {
..........
}
缺点 : 如需要排除的类较多,一个一个的指定,太麻烦.
因为 SpringBoot 的 @SpringBootApplication 会自动扫描本类所在包下的所有类和子类,需要排除的类直接定义在Springboot启动类所在包外面即可.
缺点 : 不说你也能感觉的出来吧.看具体情况吧.
使用自定义注解来实现,解决了第一个方法麻烦的问题,加上了自定义的注解的类,在此指定下排除即可.
@ComponentScan(excludeFilters = @ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = ScanIgnore.class))
结尾 :
可以发现都是通过 FilterType 这个属性来进行类的过滤的,当然它还有其他的属性值,有不同的效果,可以根据不同情况来选择。