java编写通用函数(反射技术) 判断某个bean类有哪些属性发生了变化 语言问题
对于某个实体bean 判断某些属性 被修改了,修改成什么值, 通过反射技术 实现了 对bean属性的自动化判断,次判断可以应用于 判断 哪些属性发生变化 记录到系统修改的日志中
通用函数主体如下:
/**
* 函数测试通过
* @param oreign 原始数据库的对象
* @param now 修改后生成的数据库对象
* @param t classType 通常可以为 bean.class
* author wangjian
*/
public static String filedChangePrint(Object oreign, Object now, Class<? extends java.io.Serializable> t) {
StringBuffer sb = new StringBuffer("-");
Field fields[]=t.getDeclaredFields();
String[] name=new String[fields.length];
Object[] value=new Object[fields.length];
try {
Field.setAccessible(fields, true);
for (int i = 0; i < name.length; i++) {
name[i] = fields[i].getName();
value[i] = fields[i].get(oreign) +"; new="+fields[i].get(now);
System.out.println(name[i] + "--->-orign=="+value[i]);
//判断变化的属性
if(fields[i].get(oreign) != null && fields[i].get(now) != null){
if((fields[i].get(oreign).equals(fields[i].get(now))) ==false ){
sb.append(name[i]).append("; ");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString().substring(1);
}
函数测试效果如下:
1 创建一个bean类 并实现 java.io.Serializable 类
class Bean implements java.io.Serializable{
private int id;
private String name;
private int age;
private String email;
//生成属性的 getter 和 setter 方法
public Bean(int id, String name, int age, String email) {
super();
this.id = id;
this.name = name;
this.age = age;
this.email = email;
}
public Bean() {
super();
// TODO Auto-generated constructor stub
}
}
第二步 编辑测试函数:
public static void main(String[] args) {
Bean ore = new Bean(33,"wj",27,"www.slsjfjla@qq.com");
Bean ore2 = new Bean(33,"jjjjj",28,"ffffffffff");
String changeVals = BeanFiledChangeCompress.filedChangePrint(ore, ore2, Bean.class);
System.out.println(changeVals);
}
结果打印如下:
//数值打印 函数比对过程 打印的语句
id--->-orign==33; new=33
name--->-orign==wj; new=jjjjj
age--->-orign==27; new=28
email--->-orign==www.slsjfjla@qq.com; new=ffffffffff
//打印出变化的属性列表
name; age; email
如有疑问 请留言 欢迎提供建议
评论已有 0 条