欢迎评论区回答,会在群内随机摘取问题or段子
紧接着上次的话题来聊[[上]业务数据变动日志记录的一次需求]()
上次因为项目需求,要做一个记录日志的功能,其实功能还蛮简单的造一个小工具类就可以了。
这篇文章主要就是把上篇文章的代码改造成工具类,方便后期有相同需求的人,不用在手写了~
import java.util.HashMap;
import flect.Field;
import flect.Method;
import flect.Modifier;
import java.util.List;
import java.util.Map;/*** 本工具类目的是针对两个Bean内容做比较* 效果是为了日志记录方便* 例如日志内容 "参数名:xxx, 变动前:xxx -> 变动后:xxx;......"** Created by kzyuan on 2019-09-05 11:28*/
public class BeanUtil {private static UserBean userBeanNew;private static UserBean userBeanOld;public static void main(String[] args) {// 创建User Bean对象,并设值setUserBean();//数据对比返回结果集Map<String,String> resultMap = dataComparison(userBeanNew,userBeanOld);}// 创建User Bean对象,并设值private static void setUserBean() {userBeanOld = new UserBean();userBeanOld.setId("1");userBeanOld.setName("壳叔");userBeanOld.setAge("35");userBeanOld.setEmail("keshu@bhusk");userBeanNew = new UserBean();userBeanNew.setId("2");userBeanNew.setName("kk 壳");userBeanNew.setAge("36");userBeanNew.setEmail("kk@bhusk");}// 遍历 Beanprivate static Map<String,DataLogger> traversalBean(Object obj) throws Exception {//创建Map容器Map<String,DataLogger> objMap = new HashMap<String, DataLogger> ();//开始记录容器值Field[] fields = Class().getDeclaredFields();for (Field field : fields) {DataLogger dataLogger = new DataLogger();String mod = Modifiers());System.out.println("mod = " mod);dataLogger.setMod(mod);// 跳过静态属性if (mod.indexOf("static") != -1) {continue;}// 取得注解的设置的属性值SetFieldAttribute setField = Annotation(SetFieldAttribute.class);if (setField != null) {String fieldName = setField.fieldName();String fieldType = setField.fieldType();dataLogger.setFieldName(setField.fieldName());dataLogger.setFieldType(setField.fieldType());System.out.println("注解的属性 fieldName = " fieldName);System.out.println("注解的属性 fieldType = " fieldType);String getMethod = "get" Name().substring(0, 1).toUpperCase()Name().substring(1);System.out.println("User Bean 属性的Get方法名 getMethod = " getMethod);dataLogger.setMethod(getMethod);Class[] methodParam = null;Object[] params = {};Object retVal = Class().getMethod(getMethod, methodParam).invoke(obj, params);if (fieldType.equals("list")) {
// List<String> list = (List<String>) retVal;
// if(null == list) {continue;}
// int i = 1;
// for (String favourite : list ) {
// System.out.println("User Bean 属性的值 " Name() " : " i " = " favourite);
// i ;
// }} else {// 取得Bean属性的值System.out.println("User Bean 属性的值 " Name() " = " retVal);dataLogger.setFieldValue(retVal);}}objMap.Name(), dataLogger);}return objMap;}/*** 类数据对比方法 会返回一个map 会存储发生变动的日志* @param newObj 变动后的bean* @param oldObj 变动前的bean*/private static Map<String,String> dataComparison(Object newObj,Object oldObj) {//结果容器Map<String,String> resultMap = new HashMap<String, String>();try {/*** 整理Bean分析数据*/Map<String,DataLogger> newObjMap = aversalBean(newObj);Map<String,DataLogger> oldObjMap = aversalBean(oldObj);/*** 开始分析两组map数据*/for (Map.Entry<String, DataLogger> entry : Set()) {/*** 判断两组值数据*/if (Value().getFieldValue() != (Key()).getFieldValue()) {/*** 记录日志的结果*/
// resultMap.Key(), " field name: " Value().getFieldName()
// " , new field value: " Value().getFieldValue()
// " -> old field value: " (Key()).getFieldValue());resultMap.Key(), " 发生列名: " Value().getFieldName() " , 变动后内容值: " Value().getFieldValue() " -> 变动前内容值: " (Key()).getFieldValue());}}} catch (Exception e) {e.printStackTrace();}return resultMap;}
}/*** 用于存储解析后的bean*/
class DataLogger {private String mod;/*** 字段名*/private String fieldName;/*** 字段内容*/private Object fieldValue;/*** 字段类型*/private String fieldType;/*** 属性的Get方法名*/private String method;public String getMod() {return mod;}public void setMod(String mod) {d = mod;}public String getFieldName() {return fieldName;}public void setFieldName(String fieldName) {this.fieldName = fieldName;}public Object getFieldValue() {return fieldValue;}public void setFieldValue(Object fieldValue) {this.fieldValue = fieldValue;}public String getFieldType() {return fieldType;}public void setFieldType(String fieldType) {this.fieldType = fieldType;}public String getMethod() {return method;}public void setMethod(String method) {hod = method;}
}
地址->
欢迎在评论写下你的程序员趣事~~
欢迎加入我们的小组织 ,大家都叫壳叔,期待你的到来。
我们也会定期在群内聊天记录中抽取有趣的事情或者小问题。
黑壳家根据地 Q群:200408242
本文发布于:2024-02-04 21:53:14,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170717254559942.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |