看《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”加载进入容器之中。