SpringBoot项目中排除@ComponentScan注解扫描的类

SpringBoot中使用@ComponentScan排除指定类

问题 ?

在 SpringBoot项目中有时候某些类不需要被 @ComponentScan注解给扫描到, 比如在给某个服务的Ribbon自定义配置类时,为得防止 @Configuration注解的类所在的包与 @ComponentScan扫描的包重叠.

解决 :

使用 @ComponeentScanexcludeFilters 属性进行设定我们需要排除的类.

例子 :


@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 这个属性来进行类的过滤的,当然它还有其他的属性值,有不同的效果,可以根据不同情况来选择。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
可以通过自定义注解来实现在@ComponentScan排除多个。具体步骤如下: 1. 创建一个自定义注解,例如@ExcludeScan,用于标记需要排除。 ```java import java.lang.annotation.*; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface ExcludeScan { String[] value(); } ``` 2. 在需要排除上添加@ExcludeScan注解,并指定需要排除名。 ```java @ExcludeScan({"com.example.package1", "com.example.package2"}) @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` 3. 创建一个自定义的@ComponentScan注解,用于扫描除了被@ExcludeScan标记的之外的其他。 ```java import org.springframework.context.annotation.ComponentScan; import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @ComponentScan public @interface CustomComponentScan { @AliasFor(annotation = ComponentScan.class, attribute = "value") String[] value() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "basePackages") String[] basePackages() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses") Class<?>[] basePackageClasses() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "excludeFilters") ComponentScan.Filter[] excludeFilters() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "includeFilters") ComponentScan.Filter[] includeFilters() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "useDefaultFilters") boolean useDefaultFilters() default true; } ``` 4. 在需要扫描上使用@CustomComponentScan注解,并指定需要扫描。 ```java @CustomComponentScan("com.example") @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` 通过以上步骤,可以实现在@ComponentScan排除多个
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值