@ComponnetScan
1.作用
扫描指定的包以及下面所有的子包。
value属性:指明要扫描的包
excludeFilters属性:指明要扫描时需要排除的包。
includeFilters属性:指明要扫描时需要包含那些包,但是在使用时需要将默 认的包扫描规则禁用,即useDefaultFilters = false。
excludeFilters和includeFilters属性在使用是可以自己指定过滤的规则,
@Filter注解里面的type属性可以指定过滤规则:
1.ANNOTATION:按照注解的方式进行过滤
@Filter(type=FilterType.ANNOTATION,classes = {Controller.class})
2.ASSIGNABLE_TYPE:按照给定的类型进行过滤
@Filter(type=FilterType.ASSIGNABLE_TYPE,classes = {BookDao.class})
3.ASPECTJ:按照ASPECTJ表达式进行过滤,很少使用
4.REGEX:按照正则表达式进行过滤
5.CUSTOM:自定义规则
首先自定义一个过滤规则类,然后在@Filter的classes属性值指定自定义的过滤类即可。
//过滤类
public class MyTypeFilter implements TypeFilter{
/*
* MetadataReader:获取当前正在读取的类的信息
* MetadataReaderFactory:获取所有类的信息
*/
@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);
//过滤规则
if (className.contains("er")) {
return true;
}
return false;
}
}
//在主配置类中指定
@Filter(type=FilterType.CUSTOM,classes = {MyTypeFilter.class})