场景:
在实际的开发中,每个实体类都少不了要有添加时间、添加人、修改时间、修改人这些常见字段,然后在实现类中就会写很多如下代码:
sysUser.setCreateBy(curUser.getId());
sysUser.setCreateTime(new Date());
sysUser.setEditBy(curUser.getId());
sysUser.setEditTime(new Date());
这么写以后会出现一个问题,就是idea会提示你有许多的重复代码,也想过用构造器来解决,但是实际场景中可能是前端传过来的对象,构造函数不太适合去解决代码重复这个问题。所以这里用到反射去填充,所有的实体类都可以调用统一的接口去填充这些字段,idea就不会提示代码重复了。
/**
* 根据类型 填充添加时间、添加人或者修改时间、修改人
*
* @param object 需要填充的对象
* @param cls 当前类名.class
* @param date 当前日期参数
* @param createBy 当前操作人参数
* @param isAdd true为添加 false为修改
*/
public static void buildEntity(Object object, Class<?> cls, Date date, Long createBy, boolean isAdd) {
try {
if (isAdd) {
Field createTimeField = cls.getDeclaredField("createTime");
createTimeField.setAccessible(true);
createTimeField.set(object, date);
Field createByField = cls.getDeclaredField("createBy");
createByField.setAccessible(true);
createByField.set(object, createBy);
} else {
Field editTimeField = cls.getDeclaredField("editTime");
editTimeField.setAccessible(true);
editTimeField.set(object, date);
Field editByField = cls.getDeclaredField("editBy");
editByField.setAccessible(true);
editByField.set(object, createBy);
}
} catch (NoSuchFieldException | IllegalAccessException e) {
log.error("填充实体对象发生异常", e);
throw new RuntimeException("填充实体对象发生异常");
}
}
代码上都有注释,还是比较好理解的,记录一下。