【8.3.0】【scanner】更新字段扫描获取父级类的信息

pull/62/head
stylefeng 2024-08-04 17:19:47 +08:00
parent eaacc3be48
commit 617e16fa83
1 changed files with 37 additions and 21 deletions

View File

@ -75,28 +75,8 @@ public class ClassDetailMetadataFactory {
case OBJECT:
// 如果是实体对象,则描述实体对象的所有字段信息
Class<?> objectClass = (Class<?>) fieldType;
Field[] fields = objectClass.getDeclaredFields();
fieldMetadata = new LinkedHashSet<>();
// 在处理Object中所有字段之前将当前父类放进context所有子字段不能含有父类的类型否则会递归
MetadataContext.addClassRecord(uuid, objectClass.getName());
for (Field field : fields) {
FieldMetadata fieldInfo;
// 判断字段是否是基础字段例如serialVersionUID或者delFlag等字段
if (ScannerConstants.DONT_PARSE_FIELD.contains(field.getName())) {
continue;
}
// 判断该实体是否被解析过,防止无限递归解析实体
if (MetadataContext.ensureFieldClassHaveParse(uuid, field.getGenericType())) {
fieldInfo = FieldDescriptionUtil.createBasicMetadata(field, uuid);
} else {
fieldInfo = FieldDescriptionUtil.createFieldMetadata(field, uuid);
}
fieldMetadata.add(fieldInfo);
}
processClassFields(objectClass, fieldMetadata, uuid);
break;
case OBJECT_WITH_GENERIC:
// 如果是带泛型的Object实体类型
@ -170,4 +150,40 @@ public class ClassDetailMetadataFactory {
}
}
/**
*
*
* @author fengshuonan
* @since 2022/1/14 18:51
*/
private static void processClassFields(Class<?> clazz, Set<FieldMetadata> fieldMetadata, String uuid) {
if (clazz == null || clazz == Object.class) {
return;
}
// 在处理Object中所有字段之前将当前父类放进context所有子字段不能含有父类的类型否则会递归
MetadataContext.addClassRecord(uuid, clazz.getName());
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
FieldMetadata fieldInfo;
// 判断字段是否是基础字段例如serialVersionUID或者delFlag等字段
if (ScannerConstants.DONT_PARSE_FIELD.contains(field.getName())) {
continue;
}
// 判断该实体是否被解析过,防止无限递归解析实体
if (MetadataContext.ensureFieldClassHaveParse(uuid, field.getGenericType())) {
fieldInfo = FieldDescriptionUtil.createBasicMetadata(field, uuid);
} else {
fieldInfo = FieldDescriptionUtil.createFieldMetadata(field, uuid);
}
fieldMetadata.add(fieldInfo);
}
// 递归处理父类
processClassFields(clazz.getSuperclass(), fieldMetadata, uuid);
}
}