FilterType.ANNOTATION 注解
常用
@ComponentScan(value = "com.example.annotations",
includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = { Service.class,Controller.class})},
useDefaultFilters = false
)
FilterType.ASSIGNABLE_TYPE 按照给定的类型
@ComponentScan(value = "com.example.annotations",
includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,classes ={MyTypeFilter.class, BookController.class})},
useDefaultFilters = false
)
FilterType.ASPECTJ 不常用 使用ASPECTJ表达式
FilterType.REGEX 使用正则表达式
FilterType.CUSTOM 自定义规则
注意:bean不能重名 不然会报错
@ComponentScan(value = "com.example.annotations",
includeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM,classes ={MyTypeFilter.class})},
useDefaultFilters = false
)
需要实现TypeFilter接口 并重写match方法
public class MyTypeFilter implements TypeFilter {
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
// 获取当前类注解的信息
AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
//获取当秋安正在扫描的类的类信息
ClassMetadata classMetadata = metadataReader.getClassMetadata();
// 获取当前类资源(类的路径)
Resource resource = metadataReader.getResource();
// 获取正在扫描的类名
String className = classMetadata.getClassName();
System.out.println("className" + className);
return className.contains("er")?true:false;//true表示加载进容器 false表示不加载进容器
}
}