码迷,mamicode.com
首页 > 其他好文 > 详细

【sprinb-boot】@ComponentScan 跳过扫描 excludeFilters

时间:2021-01-22 12:28:51      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:contex   contain   pre   using   out   etc   spring   factory   ble   

@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class, RestController.class}))

 

 

前言

  • springboot 2.0.0.RELEASE
  • maven 3.5.0

自动扫描

默认扫描 @SpringBootApplication 类所在目录及子目录。

跳过扫描

@ComponentScan 搭配 excludeFilters

示例:

@ComponentScan(excludeFilters = @Filter(FilterType.ANNOTATION, classes = Controller.class))
  • 1

参考:https://docs.spring.io/spring-boot/docs/2.0.0.RELEASE/api/index.html?org/springframework/boot/context/TypeExcludeFilter.html

FilterType

public enum FilterType {

	/**
	 * Filter candidates marked with a given annotation.
	 * @see org.springframework.core.type.filter.AnnotationTypeFilter
	 */
	ANNOTATION,

	/**
	 * Filter candidates assignable to a given type.
	 * @see org.springframework.core.type.filter.AssignableTypeFilter
	 */
	ASSIGNABLE_TYPE,

	/**
	 * Filter candidates matching a given AspectJ type pattern expression.
	 * @see org.springframework.core.type.filter.AspectJTypeFilter
	 */
	ASPECTJ,

	/**
	 * Filter candidates matching a given regex pattern.
	 * @see org.springframework.core.type.filter.RegexPatternTypeFilter
	 */
	REGEX,

	/** Filter candidates using a given custom
	 * {@link org.springframework.core.type.filter.TypeFilter} implementation.
	 */
	CUSTOM

}

 

 

FilterType.ANNOTATION 按注解类型排除

@SpringBootApplication
@ComponentScan(excludeFilters = @Filter(FilterType.ANNOTATION, classes = Controller.class))
public class Application {

	public static void main(String[] args) throws IOException {
		SpringApplication.run(Application.class, args);
	}
	
	@Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        return args -> {
        	System.out.println("startup done.");
        };
    }
}

 

 

FilterType.REGEX 正则表示达

@SpringBootApplication
@ComponentScan(excludeFilters = @Filter(type = FilterType.REGEX, pattern = {"net.sayyy.db.*"}))
public class Application {

	public static void main(String[] args) throws IOException {
		SpringApplication.run(Application.class, args);
	}
	
	@Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        return args -> {
        	System.out.println("startup done.");
        };
    }
}

 

 

FilterType.CUSTOM 自定义规则

@SpringBootApplication
@ComponentScan(excludeFilters = @Filter(type = FilterType.CUSTOM, classes = MyCustomerFilter.class))
public class Application {

	public static void main(String[] args) throws IOException {
		SpringApplication.run(Application.class, args);
	}
	
	@Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        return args -> {
        	System.out.println("startup done.");
        };
    }
}

 

 

自定义过滤规则是需要实现 TypeFilter 接口
自定义扫描规则, 匹配类名中带有 Service 的类

public class MyCustomerFilter implements TypeFilter {

    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
        String className = metadataReader.getClassMetadata().getClassName();
        return className.contains("Service");
    }
}

 

【sprinb-boot】@ComponentScan 跳过扫描 excludeFilters

标签:contex   contain   pre   using   out   etc   spring   factory   ble   

原文地址:https://www.cnblogs.com/exmyth/p/14311821.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!