commons-beanutils组件里的copypropertyis和cloneBean(原创)

深克隆和浅克隆的不同,大家都知道

想用commons-beanutils直接调用他里面的方法实现深克隆

发现里面的那两个方法都只是实现的浅克隆,cloneBean的源码更是调用了copyProperties来实现的

 

想要用调用这个组件里的方法实现深克隆还是有办法的:

—(代码引用:http://www.iteye.com/topic/551430

 

  1. import java.io.ByteArrayInputStream;   
  2. import java.io.ByteArrayOutputStream;   
  3. import java.io.ObjectInputStream;   
  4. import java.io.ObjectOutputStream;   
  5. import java.io.Serializable;   
  6.   
  7. import org.apache.commons.beanutils.BeanUtils;   
  8.   
  9. public class M1 {   
  10.   
  11.     public static void main(String[] args) throws Throwable {   
  12.         C1 o1 = new C1();   
  13.         o1.setP1(new C1());   
  14.         C1 o2 = (C1) BeanUtils.cloneBean(o1);   
  15.         System.out.println(o1.getP1() == o2.getP1());   
  16.         C1 o3 = (C1) deepClone(o1);   
  17.         System.out.println(o1.getP1() == o3.getP1());   
  18.     }   
  19.   
  20.     public static Object deepClone(Object src) throws Throwable {   
  21.         ByteArrayOutputStream baos = new ByteArrayOutputStream();   
  22.         ObjectOutputStream oos = new ObjectOutputStream(baos);   
  23.         oos.writeObject(src);   
  24.         oos.close();   
  25.   
  26.         ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());   
  27.         ObjectInputStream ois = new ObjectInputStream(bais);   
  28.   
  29.         Object o = ois.readObject();   
  30.         ois.close();   
  31.         return o;   
  32.     }   
  33.   
  34.     public static class C1 implements Serializable {   
  35.   
  36.         C1 p1;   
  37.   
  38.         public C1 getP1() {   
  39.             return p1;   
  40.         }   
  41.   
  42.         public void setP1(C1 p1) {   
  43.             this.p1 = p1;   
  44.         }   
  45.   
  46.     }   

其他的办法就是重写类里的cloneable方法了,自己实现深克隆

你可能感兴趣的:(BeanUtils)