Apache Commons包 BeanUtils 对象拷贝实例demo

发布时间:2019-05-08作者:laosun阅读(2929)

Apache

Apache Commons包 BeanUtils 对象拷贝实例demo Apache Commons 工具类大家都有用过,但是可能缺乏系统学习,只用到了一小部分功能,无法发挥极限的价值。

    Person.java

    /**
     * 新创建一个普通Java Bean,用来作为被克隆的对象
     * 注意:使用内部类是不可以的
     * @author sun
     */
    public class Person {
    	private String name;
    	private String email;
    	private Integer age;
    
    	public Person() {
    		
    	}
    
    	public Person(String name, String email, Integer age) {
    		super();
    		this.name = name;
    		this.email = email;
    		this.age = age;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public String getEmail() {
    		return email;
    	}
    
    	public void setEmail(String email) {
    		this.email = email;
    	}
    
    	public Integer getAge() {
    		return age;
    	}
    
    	public void setAge(Integer age) {
    		this.age = age;
    	}
    
    	public String toString() {
    		return "Person[name='" + name + "',email='" + email + "',age='" + age + "']";
    	}
    
    }


    BeanUtilsTest.java

    import java.lang.reflect.InvocationTargetException;
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.commons.beanutils.BeanUtils;
    
    /**
     * 深克隆
     * @author sun
     */
    public class BeanUtilsTest {
    
    	public static void main(String[] args) {
    		deepBeanClone();
    		convertPojoMap();
    	}
    
    	/**
    	 * 1. 对象转map
    	 * 2. map转对象
    	 */
    	private static void convertPojoMap() {
    		try {
    			// 原理也是通过Java的反射机制来做的。
    			// 2、 将一个Map对象转化为一个Bean
    			// 这个Map对象的key必须与Bean的属性相对应。
    			Map<String, String> map = new HashMap<>();
    			map.put("name", "tom");
    			map.put("email", "tom@");
    			map.put("age", "21");
    			// 将map转化为一个Person对象
    			Person person = new Person();
    			BeanUtils.populate(person, map);
    			System.out.println("map转对象:"+person.getName()+" >> "+person.getAge());
    			// 通过上面的一行代码,此时person的属性就已经具有了上面所赋的值了。
    			// 将一个Bean转化为一个Map对象了,如下:
    			@SuppressWarnings({ "unchecked" })
    			Map<String, String> map2 = BeanUtils.describe(person);
    			System.out.println("对象转map:"+map2.get("name")+" >> "+map2.get("age"));
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    		} catch (InvocationTargetException e) {
    			e.printStackTrace();
    		} catch (NoSuchMethodException e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * 测试对象深克隆
    	 */
    	private static void deepBeanClone() {
    		Person person = new Person();
    		person.setName("java");
    		person.setEmail("java@java.com");
    		person.setAge(28);
    		try {
    			// 克隆(深度克隆)
    			Person person2 = (Person) BeanUtils.cloneBean(person);
    			person2.setAge(29);
    			System.out.println("克隆产生新对象并且更新:"+person2.getName() + " >> " + person2.getAge());
    			System.out.println("原对象:"+person.getName() + " >> " + person.getAge());
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    		} catch (InstantiationException e) {
    			e.printStackTrace();
    		} catch (InvocationTargetException e) {
    			e.printStackTrace();
    		} catch (NoSuchMethodException e) {
    			e.printStackTrace();
    		}
    	}
    }


    控制台打印:

    克隆产生新对象并且更新:java >> 29
    原对象:java >> 28
    map转对象:tom >> 21
    对象转map:tom >> 21


1 +1

版权声明

 Java  源码  开源  工具  apache

 请文明留言

0 条评论