zoukankan      html  css  js  c++  java
  • 【sprinb-boot】@ComponentScan 跳过扫描 excludeFilters

    @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");
        }
    }
  • 相关阅读:
    周末班:Python基础之面向对象基础
    二分查找
    各种推导式合集
    周末班:Python基础之函数进阶
    Python基础之迭代器和生成器
    Django中的信号
    周末班:Python基础之并发编程
    周末班:Python基础之网络编程
    Python基础之面对对象进阶
    Python基础之协程
  • 原文地址:https://www.cnblogs.com/exmyth/p/14311821.html
Copyright © 2011-2022 走看看