包扫描--自定义规则

看《Spring源码深度解析》笔记

1、进行包扫描的时候,如果type=FilterType.CUSTOM,时候,即使用的是自定义规则,即给出一个FilterType实现类即可:

public class MyTypeFilter implements TypeFilter {
    /**
     * metadataReader:读取到的当前正在扫描的类的信息
     * metadataReaderFactory:可以获取到其他任何类信息的
     */
    @Override
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory)
            throws IOException {
        // TODO Auto-generated method stub
        //获取当前类注解的信息
        AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
        //获取当前正在扫描的类的类信息---类型是什么以及实现什么接口等信息
        ClassMetadata classMetadata = metadataReader.getClassMetadata();
        //获取当前类资源(比如:类的路径)
        Resource resource = metadataReader.getResource();
        String className = classMetadata.getClassName();
        //扫描所有类名包含Red的类
        if(className.contains("Red")){
            return true;
        }
        return false;
    }

}

2、在配置中进行使用:

@Configuration  //告诉spring这是一个配置类
@ComponentScan(value="com.atguigu",includeFilters = {
        @Filter(type=FilterType.CUSTOM,classes={MyTypeFilter.class})
},useDefaultFilters = false)
public class MainConfig {
}

即可以将类名包含“Red”加载进入容器之中。

posted @ 2019-12-10 21:03  努力学习~~~  阅读(338)  评论(0编辑  收藏  举报