Spring - @CompentScan全解

简介: Spring - @CompentScan全解

20210403104921695.png


基本使用

在配置类上写@CompentScan注解来进行包扫描

@Configuration
@ComponentScan(basePackages = {"com.artisan"})
public class MainConfig {
}


excludeFilters

@Configuration
@ComponentScan(basePackages = {"com.artisan"},excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION,value = {Controller.class}),
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,value = {ArtisanService.class})
})
public class MainConfig {
}


这里会 排除标注了@Controller注解 和 特定的ArtisanService ,不会被加载到IOC容器中。


includeFilters

若使用包含的用法, 需要把useDefaultFilters属性设置为false(true表示扫描全部的)

@Configuration
@ComponentScan(basePackages = {"com.artisan"},includeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION,value = {Controller.class, Service.class})
},useDefaultFilters = false)
public class MainConfig {
}


@ComponentScan.Filter

4种类型


20210403110008910.png


  • 注解形式的FilterType.ANNOTATION比如@Controller @Service @Repository @Compent
  • 指定类型的 FilterType.ASSIGNABLE_TYPE


@ComponentScan.Filter(type =
FilterType.ASSIGNABLE_TYPE,value = {ArtisanService.class})
  • aspectj类型的 FilterType.ASPECTJ(不常用)
  • 正则表达式的 FilterType.REGEX(不常用)
  • 自定义的 FilterType.CUSTOM


自定义FilterType

import org.springframework.core.io.Resource;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.core.type.ClassMetadata;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.TypeFilter;
import java.io.IOException;
public class ArtisanFilterType implements TypeFilter {
    @Override
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
        //获取当前类的注解源信息
        AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
        //获取当前类的class的源信息
        ClassMetadata classMetadata = metadataReader.getClassMetadata();
        //获取当前类的资源信息
        Resource resource =  metadataReader.getResource();
        System.out.println("类的路径:"+classMetadata.getClassName());
        if(classMetadata.getClassName().contains("dao")) {
            return true;
        }
        return false;
    }
}


引用自定义类型的Filter

@ComponentScan(basePackages = {"com.tuling.testcompentscan"},excludeFilters = { 
        @ComponentScan.Filter(type = FilterType.CUSTOM,value = ArtisanFilterType.class)
},includeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION,value = Repository.class)
})


测试的话,打印下beanDefinition 即可

public class MainClass {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfig.class);
        String[] beanDefinationNames = ctx.getBeanDefinitionNames();
        for (String name:beanDefinationNames) {
            System.out.println("bean的定义信息:"+name);
        }
    }
}



相关文章
|
Kubernetes 负载均衡 Cloud Native
Spring Cloud Kubernetes使用全解(一)—官方原版
Spring Cloud Kubernetes使用全解(一)—官方原版
12482 2
|
Kubernetes 负载均衡 安全
Spring Cloud Kubernetes使用全解(二)—官方原版
Spring Cloud Kubernetes使用全解(二)—官方原版
697 0
|
Java Spring 容器
Spring - @Conditional全解
Spring - @Conditional全解
81 0
|
Java Spring
Spring Cloud Ribbon 全解 (7) - SpringCloud环境下纯Ribbon(不包含Eureka)重试配置 干货满满张哈希
Spring Cloud Ribbon 全解 (7) - SpringCloud环境下纯Ribbon(不包含Eureka)重试配置 干货满满张哈希
Spring Cloud Ribbon 全解 (7) - SpringCloud环境下纯Ribbon(不包含Eureka)重试配置 干货满满张哈希
|
负载均衡 Java 微服务
Spring Cloud Ribbon 全解 (6) - SpringCloud环境下纯Ribbon(不包含Eureka)使用与启动分析
Spring Cloud Ribbon 全解 (6) - SpringCloud环境下纯Ribbon(不包含Eureka)使用与启动分析
Spring Cloud Ribbon 全解 (6) - SpringCloud环境下纯Ribbon(不包含Eureka)使用与启动分析
|
缓存 负载均衡 Java
Spring Cloud Ribbon 全解 (5) - 基本组件实现源码(3)
Spring Cloud Ribbon 全解 (5) - 基本组件实现源码(3)
Spring Cloud Ribbon 全解 (5) - 基本组件实现源码(3)
|
存储 负载均衡 Java
Spring Cloud Ribbon 全解 (4) - 基本组件实现源码(2)
Spring Cloud Ribbon 全解 (4) - 基本组件实现源码(2)
Spring Cloud Ribbon 全解 (4) - 基本组件实现源码(2)
|
负载均衡 Java 微服务
Spring Cloud Ribbon 全解 (3) - 基本组件实现源码(1)
Spring Cloud Ribbon 全解 (3) - 基本组件实现源码(1)
Spring Cloud Ribbon 全解 (3) - 基本组件实现源码(1)
|
负载均衡 Java Spring
Spring Cloud Ribbon 全解 (2) - 基本组件简介
Spring Cloud Ribbon 全解 (2) - 基本组件简介
Spring Cloud Ribbon 全解 (2) - 基本组件简介
|
缓存 负载均衡 网络协议
Spring Cloud Ribbon 全解 (1) - 总览篇
Spring Cloud Ribbon 全解 (1) - 总览篇
Spring Cloud Ribbon 全解 (1) - 总览篇