• Spring @ComponentScan 自定义扫描规则


    Spring @ComponentScan 组件中扫描规则使用场景:

    1. package org.example.cap2.config;
    2. import org.springframework.context.annotation.Bean;
    3. import org.springframework.context.annotation.ComponentScan;
    4. import org.springframework.context.annotation.Configuration;
    5. import org.springframework.context.annotation.ComponentScan.Filter;
    6. import org.springframework.context.annotation.FilterType;
    7. import org.example.model.Person;
    8. @Configuration
    9. @ComponentScan(value = "org.example.cap2", includeFilters = {
    10. @Filter(type = FilterType.CUSTOM, classes = MyTypeFilter.class)
    11. }, useDefaultFilters = false)
    12. // includeFilters = Filter[], 指定扫描的时候只需要包含哪些组件
    13. // excludeFilters = Filter[], 指定扫描的时候按照什么规则排除哪些组件
    14. // useDefaultFilters = false, 默认是true 扫描所有组件,要改成false
    15. public class MainConfig2 {
    16. @Bean(value = "abcPerson")
    17. public Person person() {
    18. return new Person("abc", "30");
    19. }
    20. }

     自定义扫描规则代码实现:

    1. package org.example.config;
    2. import org.springframework.core.io.Resource;
    3. import org.springframework.core.type.AnnotationMetadata;
    4. import org.springframework.core.type.ClassMetadata;
    5. import org.springframework.core.type.classreading.MetadataReader;
    6. import org.springframework.core.type.classreading.MetadataReaderFactory;
    7. import org.springframework.core.type.filter.TypeFilter;
    8. import java.io.IOException;
    9. /**
    10. * 新增自定义过滤规则类
    11. */
    12. public class MyTypeFilter implements TypeFilter {
    13. /**
    14. * @param metadataReader 读取当前正在扫描类的信息
    15. * @param metadataReaderFactory 可以获取到其他任何类信息
    16. * @return
    17. * @throws IOException
    18. */
    19. @Override
    20. public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory)
    21. throws IOException {
    22. // 获取当前注解类的信息
    23. AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
    24. // 获取当前正在扫描的类的信息
    25. ClassMetadata classMetadata = metadataReader.getClassMetadata();
    26. // 获取当前类资源 类的路径
    27. Resource resource = metadataReader.getResource();
    28. String className = classMetadata.getClassName();
    29. System.out.println("------>" + className);
    30. if (className.contains("er")) { // 当前类名包含er,则匹配成功
    31. return true;
    32. }
    33. return false;
    34. }
    35. }

  • 相关阅读:
    不能复现的报错
    【附源码】计算机毕业设计SSM实验室设备管理系统
    【计算机体系知识】操作系统笔记(持续更新)
    聊聊logback的MDCFilter
    PMP每日一练 | 考试不迷路-8.6(包含敏捷+多选)
    06.webpack性能优化--构建速度
    arcgis实现矢量数据的局部裁剪
    m基于Lorenz混沌自同步的混沌数字保密通信系统的FPGA实现,verilog编程实现+MATLAB混沌验证程序
    Elasticsearch简介
    Linux驱动开发 --- IIC总线
  • 原文地址:https://blog.csdn.net/u011672034/article/details/132733657