[上]业务数据变动日志记录的一次需求

阅读: 评论:0

[上]业务数据变动日志记录的一次需求

[上]业务数据变动日志记录的一次需求

本文由黑壳博客原创

本文来源[上]业务数据变动日志记录的一次需求

今日一问

一个打工的,到底需要多少台电脑?
欢迎在下方评论留言

正文

最近项目有个小需求,业务数据修改后要记录个日志,要记录变动的前后的值。

需要给Bean的属性添加属性值 用于日志参数备注 例如 参数userName 在日志中记录为 用户名称

日志示例

 某某某功能 产生变动日志内容  变动前 用户名称:李三  变动后 用户名称:李四

查了一下,自己以前也没整理过类似的记录文章,这次顺便记录一下,方便新人程序员参考。

本篇先出干货,给参数添加注解记录中文备注。数据变动对比,会在下篇文章。

方式用Java Bean的遍历,利用Java的反射原理。Bean的属性添加属性值,使用Java的自定义注解。

例子:

首先创建注解类:

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SetFieldAttribute {String fieldName() default "";String fieldType() default "";
}

创建Java Bean:

	import java.util.List;public class UserBean {private static final long i = 1l;@SetFieldAttribute(fieldName="userId")private String id;@SetFieldAttribute(fieldName="userName")private String name;@SetFieldAttribute(fieldName="userAge")private String age;@SetFieldAttribute(fieldName="userEmail")private String email;@SetFieldAttribute(fieldName="userFavourite", fieldType="list")private List<String> favourite;/*** @return the id*/@SetFieldAttribute(fieldName="userGetId")public String getId() {return id;}/*** @param id the id to set*/public void setId(String id) {this.id = id;}/*** @return the name*/@SetFieldAttribute(fieldName="userGetName")public String getName() {return name;}/*** @param name the name to set*/public void setName(String name) {this.name = name;}/*** @return the age*/@SetFieldAttribute(fieldName="userGetAge")public String getAge() {return age;}/*** @param age the age to set*/public void setAge(String age) {this.age = age;}/*** @return the email*/@SetFieldAttribute(fieldName="userGetEmail")public String getEmail() {return email;}/*** @param email the email to set*/public void setEmail(String email) {ail = email;}/*** @return the favourite*/@SetFieldAttribute(fieldName="userGetFavourite", fieldType="list")public List<String> getFavourite() {return favourite;}/*** @param favourite the favourite to set*/public void setFavourite(List<String> favourite) {this.favourite = favourite;}}

遍历Bean 工具参考类:

 
import flect.Field;
import flect.Method;
import flect.Modifier;
import java.util.ArrayList;
import java.util.List;/*** Created by kzyuan on 2019-09-05 11:28*/
public class BeanUtil {private static UserBean userBean;/*** @param args* @throws Exception*/public static void main(String[] args) throws Exception {// 创建User Bean对象,并设值setUserBean();//遍历 BeantraversalBean();// 通过Bean的方法遍历 traversalFunction();}// 创建User Bean对象,并设值private static void setUserBean() {userBean = new UserBean();userBean.setId("1");userBean.setName("壳叔");userBean.setAge("35");userBean.setEmail("keshu@bhusk");List<String> favouriteList = new ArrayList<String>();favouriteList.add("蹦极");favouriteList.add("高空跳伞");favouriteList.add("滑雪");favouriteList.add("旅游");userBean.setFavourite(favouriteList);}// 遍历 Beanprivate static void traversalBean() throws Exception {// 通过Bean的属性遍历System.out.println("通过Bean的属性遍历");Field[] fields = Class().getDeclaredFields();for (Field field : fields) {String mod = Modifiers());System.out.println("mod = " + mod);// 跳过静态属性if (mod.indexOf("static") != -1) {continue;}// 取得注解的设置的属性值SetFieldAttribute setField = Annotation(SetFieldAttribute.class);if (setField != null) {String fieldName = setField.fieldName();String fieldType = 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);Class[] methodParam = null;Object[] params = {};Object retVal = Class().getMethod(getMethod, methodParam).invoke(userBean, params);if (fieldType.equals("list")) {List<String> favouriteList = (List<String>) retVal;int i = 1;for (String favourite : favouriteList) {System.out.println("User Bean 属性的值 " + Name() + " : " + i + " = " + favourite);i++;}} else {// 取得Bean属性的值System.out.println("User Bean 属性的值 " + Name() + " = " + retVal);}}}}private static void traversalFunction() throws Exception {System.out.println("通过Bean的方法遍历");// 通过Bean的方法遍历Method[] methods = Class().getDeclaredMethods();for (Method method : methods) {// 取得注解的设置的属性值SetFieldAttribute setField = Annotation(SetFieldAttribute.class);if (setField != null) {String fieldName = setField.fieldName();String fieldType = setField.fieldType();System.out.println("注解的属性 fieldName = " + fieldName);System.out.println("注解的属性 fieldType = " + fieldType);Class[] methodParam = null;Object[] params = {};Object retVal = null;if (Name().substring(0, 3).equals("get")) {String mod = Modifiers());System.out.println("mod = " + mod);System.out.println("User Bean 属性的Get方法名 getMethod = " + Name());retVal = Class().Name(), methodParam).invoke(userBean, params);if (fieldType.equals("list")) {List<String> favouriteList = (List<String>) retVal;int i = 1;for (String favourite : favouriteList) {System.out.println("User Bean 属性的值 " + Name() + " : " + i + " = " + favourite);i++;}} else {// 取得Bean属性的值System.out.println("User Bean 属性的值 " + Name() + " = " + retVal);}}}}}
}

执行结果:

通过Bean的属性遍历
mod = private static final
mod = private
注解的属性 fieldName = userId
注解的属性 fieldType = 
User Bean 属性的Get方法名 getMethod = getId
User Bean 属性的值 id = 1
mod = private
注解的属性 fieldName = userName
注解的属性 fieldType = 
User Bean 属性的Get方法名 getMethod = getName
User Bean 属性的值 name = 壳叔
mod = private
注解的属性 fieldName = userAge
注解的属性 fieldType = 
User Bean 属性的Get方法名 getMethod = getAge
User Bean 属性的值 age = 35
mod = private
注解的属性 fieldName = userEmail
注解的属性 fieldType = 
User Bean 属性的Get方法名 getMethod = getEmail
User Bean 属性的值 email = keshu@bhusk
mod = private
注解的属性 fieldName = userFavourite
注解的属性 fieldType = list
User Bean 属性的Get方法名 getMethod = getFavourite
User Bean 属性的值 favourite : 1 = 蹦极
User Bean 属性的值 favourite : 2 = 高空跳伞
User Bean 属性的值 favourite : 3 = 滑雪
User Bean 属性的值 favourite : 4 = 旅游通过Bean的方法遍历
注解的属性 fieldName = userGetName
注解的属性 fieldType = 
mod = public
User Bean 属性的Get方法名 getMethod = getName
User Bean 属性的值 getName = 壳叔
注解的属性 fieldName = userGetId
注解的属性 fieldType = 
mod = public
User Bean 属性的Get方法名 getMethod = getId
User Bean 属性的值 getId = 1
注解的属性 fieldName = userGetAge
注解的属性 fieldType = 
mod = public
User Bean 属性的Get方法名 getMethod = getAge
User Bean 属性的值 getAge = 35
注解的属性 fieldName = userGetEmail
注解的属性 fieldType = 
mod = public
User Bean 属性的Get方法名 getMethod = getEmail
User Bean 属性的值 getEmail = keshu@bhusk
注解的属性 fieldName = userGetFavourite
注解的属性 fieldType = list
mod = public
User Bean 属性的Get方法名 getMethod = getFavourite
User Bean 属性的值 getFavourite : 1 = 蹦极
User Bean 属性的值 getFavourite : 2 = 高空跳伞
User Bean 属性的值 getFavourite : 3 = 滑雪
User Bean 属性的值 getFavourite : 4 = 旅游

About

欢迎在评论写下你的程序员趣事~~

欢迎加入我们的小组织 ,大家都叫壳叔,期待你的到来。

欢迎关注公众号

这是我们的Group

黑壳家根据地 Q群:200408242

本文发布于:2024-02-04 21:53:29,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170717257459943.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:变动   需求   业务   数据   日志
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23