在开发中有时候会通过反射操作包含集合的类,直接上代码
private static void encryptField(Object encryptObject) {
Class<?> infoClass = encryptObject.getClass();
//获取所有属性包括父类
List<Field> allField= new ArrayList<>();
while (infoClass != null) { // 遍历所有父类字节码对象
Field[] declaredFields = infoClass.getDeclaredFields();
try {
fieldsList.addAll(Arrays.asList(declaredFields)); //将`Filed[]`数组转换为`List<>`然后再将其拼接至`ArrayList`上
infoClass = infoClass.getSuperclass(); // 获得父类的字节码对象
} catch (Exception e) {
e.printStackTrace();
}
}
for (Field field : allField) {
field.setAccessible(true);
Object obj = field.get(encryptObject);
if (obj == null) {
continue;
}
//判断是否是集合类型
if (obj instanceof Collection) {
Collection<?> collection = (Collection<?>) obj;
for (Object o : collection) {
if (o != null) {
//递归
encryptField(o);
}
}
}
//后面就是具体业务功能操作
//该字段是否加了EncryptSwitch注解
if (field.isAnnotationPresent(EncryptSwitch.class)) {
System.out.println(field);
}
}
}
这篇博客探讨了在Java开发中如何使用反射来操作包含集合的类,并进行数据加密。通过遍历对象的所有属性,包括父类的属性,识别并处理集合类型的字段,对每个元素递归调用加密方法。同时,检查字段上的特定注解以执行业务逻辑。
1283





