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=【汤唯】]]]

 

posted @ 2016-08-17 00:02  艺言弈行  阅读(1217)  评论(0编辑  收藏  举报