Bean熟悉替换,只替换部分属性,其他属性值不改变详解编程语言

Bean熟悉替换,只替换部分属性,其他属性值不改变

需要加入:asm.jar  cglib-2.1.jar,用来map和bean之间的转换(比spring和反射的效率好,因为加入了缓存)

 

package com.bean.test; 
 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import net.sf.cglib.beans.BeanMap; 
public class CopyBean { 
     
    /** 
     * @param args 
     */ 
    public static void main(String[] args) { 
         
        User u1 = new User(); 
        u1.setId(1); 
        u1.setName("用户1"); 
        u1.setPwd("12333"); 
        u1.setAddress("杭州西湖区"); 
        GirlFriend girl11 = new GirlFriend("范冰冰"); 
        GirlFriend girl12 = new GirlFriend("林心如"); 
        List<GirlFriend> list1 = new ArrayList<GirlFriend>(); 
        list1.add(girl11); 
        list1.add(girl12); 
        u1.setGirls(list1); 
         
        User u2 = new User(); 
        u2.setName("【用户222】"); 
        u2.setAddress("【-甘肃省兰州市-】"); 
        GirlFriend girl21 = new GirlFriend("【赵雅芝】"); 
        GirlFriend girl22 = new GirlFriend("【张柏芝】"); 
        GirlFriend girl32 = new GirlFriend("【汤唯】"); 
        List<GirlFriend> list2 = new ArrayList<GirlFriend>(); 
        list2.add(girl21); 
        list2.add(girl22); 
        list2.add(girl32); 
        u2.setGirls(list2); 
         
        copyBean(u1, u2); 
        System.out.println("拷贝后:"+u1); 
    }
}

 拷贝的方法:

/** 
     * 将对象中需要改变的属性值 拷贝到目标对象中,替换目标对象中的部分属性值 
     * 
     * @param fromBean 要改变的对象 
     * @param targetBean 目标对象 
     */ 
    public static void copyBean(Object fromBean, Object targetBean) { 
        Map<String, Object> fromMap = beanToMap(fromBean); 
        Map<String, Object> toMap = beanToMap(targetBean); 
        for (String key : fromMap.keySet()) { 
            if (fromMap.get(key) == null) { 
                continue; 
            } 
            //将fromMap的值设置到toMap中 
            toMap.put(key, fromMap.get(key)); 
        } 
        //转换map为bean 
        mapToBean(toMap, targetBean); 
    } 
 
    /** 
     * 将对象装换为map 
     * 
     * @param bean 
     * @return 
     */ 
    public static Map<String, Object> beanToMap(Object bean) { 
        Map<String, Object> map = new HashMap<String, Object>(); 
        if (bean != null) { 
            BeanMap beanMap = BeanMap.create(bean); 
            for (Object key : beanMap.keySet()) { 
                map.put(key + "", beanMap.get(key)); 
            } 
        } 
        return map; 
    } 
 
    /** 
     * 将map装换为javabean对象 
     * 
     * @param map 
     * @param bean 
     * @return 
     */ 
    public static void mapToBean(Map<String, Object> map, Object bean) { 
        BeanMap beanMap = BeanMap.create(bean); 
        beanMap.putAll(map); 
    }

结果:

from:{id=0, girls=[GirlFriend [name=【赵雅芝】], GirlFriend [name=【张柏芝】], GirlFriend [name=【汤唯】]], pwd=null, address=【-甘肃省兰州市-】, name=【用户222】} 
 
to:{id=1, girls=[GirlFriend [name=范冰冰], GirlFriend [name=林心如]], pwd=12333, address=杭州西湖区, name=用户1} 
 
拷贝后:User [编号=1, 姓名=【用户222】, 密码=12333, 地址=【-甘肃省兰州市-】, 女朋友=[GirlFriend [name=【赵雅芝】], GirlFriend [name=【张柏芝】], GirlFriend [name=【汤唯】]]]

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/16968.html

(0)
上一篇 2021年7月19日 19:46
下一篇 2021年7月19日 19:46

相关推荐

发表回复

登录后才能评论