请通过浏览器功能收藏网页

java编写通用函数(反射技术) 判断某个bean类有哪些属性发生了变化 语言问题

发布时间:2018-10-09 17:18:49  作者:本站编辑  来源:本站原创  浏览次数:
我有话说 | 分享 |
www.javainfo.com.cn 上干货 欢迎收藏


对于某个实体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