Introspector和PropertyDescriptor
关于这两个类的详细介绍,我这里就不说了,简单的理解就是对象信息的描述,里面提供了一些API方便我们拿到对象的信息
直接上代码吧
Object arg0 = joinPoint.getArgs()[index];
List<Field> fields = Arrays.stream(arg0.getClass().getDeclaredFields()).filter(f -> {
String name = f.getName();
//过滤掉不需要修改的属性
return "deptId".equals(name);
}).collect(Collectors.toList());
if(fields.size()==0){
logger.error("未找到deptId变量");
return;
}
// 获取当前的用户
Long depId = 0L;
LoginUser loginUser = SecurityUtils.getLoginUser();
if (StringUtils.isNotNull(loginUser))
{
SysUser currentUser = loginUser.getUser();
// 如果是超级管理员,则不过滤数据
if (StringUtils.isNotNull(currentUser))
{
depId = currentUser.getDeptId();
}
}
for (Field field : fields) {
try {
PropertyDescriptor descriptor = new PropertyDescriptor(field.getName(), arg0.getClass());
Method writeMethod = descriptor.getWriteMethod();
writeMethod.invoke(arg0,depId);
} catch (IntrospectionException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
logger.error("调用set方法异常");
return;
}
}