Spring: @ComponentScan @ComponentScans

 

只扫描@Repository, 必须关闭默认Filter

@ComponentScan(value = {"io.vent.venial"},
  includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Repository.class})},
  useDefaultFilters = false)

 

排除@Repository

@ComponentScan(value = {"io.vent.venial"},
  excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Repository.class})})

 

 

@ComponentScans结合多个@ComponentScan

@ComponentScans(value = {@ComponentScan("io.vent.venial.dao"),@ComponentScan("io.vent.venial.service")})

 

排除指定类

@ComponentScan(value = "io.vent.venial", excludeFilters = {
  @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {VenueDao.class})
})

 

排除FQDN类名含有service的

@ComponentScan(value = "io.vent.venial", excludeFilters = {
  @ComponentScan.Filter(type = FilterType.CUSTOM, classes = {MyTypeFilter.class})
})
复制代码
package io.vent.venial;


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 MyTypeFilter implements TypeFilter{
  @Override
  public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException{
    /**
     * metadataReader:读取到的当前正在扫描的类的信息
     * metadataReaderFactory:可以获取到其他任何类信息的
     */
    //获取当前类注解的信息
    AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
    //获取当前正在扫描的类的类信息
    ClassMetadata classMetadata = metadataReader.getClassMetadata();
    //获取当前类资源(类的路径)
    Resource resource = metadataReader.getResource();

    String className = classMetadata.getClassName();
    System.out.println("className = " + className);
    System.out.println("\033[37;7m>>>>>> " + className.contains("er") + " <<<<<<\033[0m");
    if(className.contains("service")){
      return true;
    }
    return false;
  }
}
复制代码

 

posted @   ascertain  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示