【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"); } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM