FilterType过滤类型
ANNOTATION:注解过滤
ASSIGNABLE_TYPE:指定类型过滤
ASPECTJ:ASPECTJ表达式过滤
REGEX:REGEX过滤
CUSTOM:自定义过滤
public enum FilterType {
ANNOTATION,
ASSIGNABLE_TYPE,
ASPECTJ,
REGEX,
CUSTOM;
private FilterType() {
}
}
1.使用指定的类型作为过滤的条件
结果
2.重点的是自定义过滤规则
自定义规则的创建方式
1.创建类实现接口TypeFilter
2.在接口的方法内进行设置过滤的规则
3.中的类MetadataReader :表示当前正在被扫描的类
/**
* @project_name:hibernate02
* @date:2019/8/18:10:53
* @author:shinelon
* @Describe: 自定义过滤规则
*/
public class MyFilterType implements TypeFilter {
/**
* 此方法作为过滤的方法
* @param metadataReader 代表当前正在扫描的类
* @param metadataReaderFactory 可以通过此对象获取到的其他扫描过的类
* @return
* @throws IOException
*/
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
//获取的是当前类的所有注解
AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
//获取到所有的类关系,如父类子类接口等
ClassMetadata classMetadata = metadataReader.getClassMetadata();
System.out.println(classMetadata.getClassName());//获取类的名称
//获取类的资源 如路径地址等
Resource resource = metadataReader.getResource();
return false;
}
}
获取相关的类信息
2.设置自定义过滤的方式
如果包含则er返回true表示不过滤创建该对象
/**
* @project_name:hibernate02
* @date:2019/8/18:10:53
* @author:shinelon
* @Describe: 自定义过滤规则
*/
public class MyFilterType implements TypeFilter {
/**
* 此方法作为过滤的方法
* @param metadataReader 代表当前正在扫描的类
* @param metadataReaderFactory 可以通过此对象获取到的其他扫描过的类
* @return
* @throws IOException
*/
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();
//设置自定义过滤条件,只要扫描的类名称包含e则返回true
if(className.contains("er")){
return true;
}
return false;
}
}
/**
* @project_name:hibernate02
* @date:2019/8/17:20:10
* @author:shinelon
* @Describe: 注解配置类
*/
@Configuration //告诉Spring此类为配置类
@ComponentScan(value = "com.itguigu",useDefaultFilters = false,excludeFilters = {
//不扫描包含的注解
// @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class}),
// @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,classes = BookController.class),
// @ComponentScan.Filter(type = FilterType.CUSTOM,classes = {MyFilterType.class})
},includeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM ,classes = {MyFilterType.class})})//使用自定义的过滤器创建bean
public class MyConfiguration {
@Bean("person")//bean注解就是相当于在配置文件内的bean标签一样 默认情况下 方法的名字为bean的名称
public Person person1(){
return new Person("GuoQi","1234");
}
}
结果