zoukankan      html  css  js  c++  java
  • 包扫描

    看《spring源码解析》笔记

    1、使用@ComponentScan,会到对应包中对添加特定注解(@Service,@Constroller,@Repository)的类进行扫描,添加到容器中。

    @Configuration

    @ComponentScan(value="com.atguigu")
    public class MainConfig { }

    2、如果想查看容器中扫描出哪些:

    @Test
        public void test01(){
            AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
            String[] definitionNames = applicationContext.getBeanDefinitionNames();
            for (String name : definitionNames) {
                System.out.println(name);
            }
        }

    3、使用包扫描的时候,还可以使用过滤规则,查看@ComponentScan的内容,可以发现:

       /*只包含哪些,扫描的时候按照什么规则只需要包含哪些组件*/ 
      ComponentScan.Filter[] includeFilters() default {};
       /*包含哪些,扫描的时候按照什么规则排除那些组件*/ 
      ComponentScan.Filter[] excludeFilters() default {};

      其中includeFilters和excludeFilters都是Filter类的数组:

    @Retention(RetentionPolicy.RUNTIME)
        @Target({})
        public @interface Filter {
            FilterType type() default FilterType.ANNOTATION;
    
            @AliasFor("classes")
            Class<?>[] value() default {};
    
            @AliasFor("value")
            Class<?>[] classes() default {};
    
            String[] pattern() default {};
        }

      说明其中可以根据type进行包含或者屏蔽,type的值有:ANNOTATION,ASSIGNABLE_TYPE,ASPECTJ,REGEX,CUSTOM;

      classes是一个Class数组。

      以下为使用排除或只包含时的例子:

    @Configuration
    @ComponentScan(value="com.atguigu",includeFilters = {
                            @Filter(type=FilterType.ANNOTATION,classes={Controller.class})})
    public class MainConfig {
    
    }

    解释:扫描"com.atguigu"包下的类,通过注解进行过滤,只包含:注解是Controller的类

    具体实现效果,通过第二步进行查看。

    4、在过滤规则中还可以使用:useDefaultFilters = false,可以屏蔽spring默认加载的Bean。

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

    5、延伸知识:

      (1)、通过查看ComponentScan,可以发现其是可以重复的,即可以多写几次:

    @Repeatable(ComponentScans.class)

      (2)、当有多写几次的需求的时候,可以使用@ComponentScans注解,里面value是一个数组。

    @ComponentScans(
    value = {@ComponentScan(value="com.atguigu",includeFilters = {
    @Filter(type=FilterType.CUSTOM,classes={MyTypeFilter.class})
    },useDefaultFilters = false) ,
    @ComponentScan(value="com.atguigu",includeFilters = {
    @Filter(type=FilterType.ANNOTATION,classes={Controller.class})
    },useDefaultFilters = false)}
    )
  • 相关阅读:
    HTML学习心得
    VS相关
    安全算法
    第三方库的编译
    C++编译问题
    GCC编译
    linux系统·用户管理
    批处理遍历并计算子文件夹下的文件数目
    [Tianchi] Repeat Buyers Prediction-Challenge the Baseline -- version 0
    win10安装cuda
  • 原文地址:https://www.cnblogs.com/mayang2465/p/11985144.html
Copyright © 2011-2022 走看看