Class AbstractTypeScanner<T extends AbstractTypeScanner<T>>
java.lang.Object
org.aoju.bus.core.scanner.annotation.AbstractTypeScanner<T>
- Type Parameters:
T- 对象泛型
- All Implemented Interfaces:
AnnotationScanner
- Direct Known Subclasses:
MethodScanner,TypeScanner
public abstract class AbstractTypeScanner<T extends AbstractTypeScanner<T>>
extends Object
implements AnnotationScanner
为需要从类的层级结构中获取注解的
AnnotationScanner提供基本实现- Since:
- Java 17+
- Author:
- Kimi Liu
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class若类型为jdk代理类,则尝试转换为原始被代理类 -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractTypeScanner(boolean includeSupperClass, boolean includeInterfaces, Predicate<Class<?>> filter, Set<Class<?>> excludeTypes) 构造一个类注解扫描器 -
Method Summary
Modifier and TypeMethodDescriptionaddConverters(UnaryOperator<Class<?>> converter) 添加转换器addExcludeTypes(Class<?>... excludeTypes) 添加不扫描的类型,该类型及其树结构将直接不被查找protected Class<?> 若存在转换器,则使用转换器对目标类进行转换protected abstract Annotation[]getAnnotationsFromTargetClass(AnnotatedElement source, int index, Class<?> targetClass) 从类上获取最终所需的目标注解protected abstract Class<?> getClassFormAnnotatedElement(AnnotatedElement annotatedElement) 从要搜索的注解元素上获得要递归的类型boolean是否允许扫描父接口boolean是否允许扫描父类protected booleanisNotNeedProcess(Set<Class<?>> accessedTypes, Class<?> targetClass) 当前类是否不需要处理voidscan(BiConsumer<Integer, Annotation> consumer, AnnotatedElement annotatedEle, Predicate<Annotation> filter) 则根据广度优先递归扫描类的层级结构,并对层级结构中类/接口声明的层级索引和它们声明的注解对象进行处理protected voidscanInterfaceIfNecessary(List<Class<?>> nextClasses, Class<?> targetClass) 若includeInterfaces为true,则将目标类的父接口也添加到nextClassesprotected voidscanSuperClassIfNecessary(List<Class<?>> nextClassQueue, Class<?> targetClass) 若includeSupperClass为true,则将目标类的父类也添加到nextClasses设置过滤器,若类型无法通过该过滤器,则该类型及其树结构将直接不被查找protected TsetIncludeInterfaces(boolean includeInterfaces) 是否允许扫描父接口protected TsetIncludeSupperClass(boolean includeSupperClass) 是否允许扫描父类Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.aoju.bus.core.scanner.AnnotationScanner
getAnnotations, getIfSupport, scanIfSupport, support
-
Constructor Details
-
AbstractTypeScanner
-
-
Method Details
-
isIncludeSupperClass
public boolean isIncludeSupperClass()是否允许扫描父类- Returns:
- 是否允许扫描父类
-
setIncludeSupperClass
是否允许扫描父类- Parameters:
includeSupperClass- 是否- Returns:
- 当前实例
-
isIncludeInterfaces
public boolean isIncludeInterfaces()是否允许扫描父接口- Returns:
- 是否允许扫描父接口
-
setIncludeInterfaces
是否允许扫描父接口- Parameters:
includeInterfaces- 是否- Returns:
- 当前实例
-
setFilter
-
addExcludeTypes
-
addConverters
添加转换器- Parameters:
converter- 转换器- Returns:
- 当前实例
- See Also:
-
scan
public void scan(BiConsumer<Integer, Annotation> consumer, AnnotatedElement annotatedEle, Predicate<Annotation> filter) 则根据广度优先递归扫描类的层级结构,并对层级结构中类/接口声明的层级索引和它们声明的注解对象进行处理- Specified by:
scanin interfaceAnnotationScanner- Parameters:
consumer- 对获取到的注解和注解对应的层级索引的处理annotatedEle- 注解元素filter- 注解过滤器,无法通过过滤器的注解不会被处理。该参数允许为空。
-
getClassFormAnnotatedElement
从要搜索的注解元素上获得要递归的类型- Parameters:
annotatedElement- 注解元素- Returns:
- 要递归的类型
-
getAnnotationsFromTargetClass
protected abstract Annotation[] getAnnotationsFromTargetClass(AnnotatedElement source, int index, Class<?> targetClass) 从类上获取最终所需的目标注解- Parameters:
source- 最初的注解元素index- 类的层级索引targetClass- 类- Returns:
- 最终所需的目标注解
-
isNotNeedProcess
-
scanInterfaceIfNecessary
-
scanSuperClassIfNecessary
-
convert
-