深克隆和浅克隆的不同,大家都知道
想用commons-beanutils直接调用他里面的方法实现深克隆
发现里面的那两个方法都只是实现的浅克隆,cloneBean的源码更是调用了copyProperties来实现的
?
想要用调用这个组件里的方法实现深克隆还是有办法的:
―(代码引用:http://www.iteye.com/topic/551430)
?
- import?java.io.ByteArrayInputStream; ??
- import?java.io.ByteArrayOutputStream; ??
- import?java.io.ObjectInputStream; ??
- import?java.io.ObjectOutputStream; ??
- import?java.io.Serializable; ??
- ??
- import?org.apache.commons.beanutils.BeanUtils; ??
- ??
- public?class?M1?{ ??
- ??
- ????public?static?void?main(String[]?args)?throws?Throwable?{ ??
- ????????C1?o1?=?new?C1(); ??
- ????????o1.setP1(new?C1()); ??
- ????????C1?o2?=?(C1)?BeanUtils.cloneBean(o1); ??
- ????????System.out.println(o1.getP1()?==?o2.getP1()); ??
- ????????C1?o3?=?(C1)?deepClone(o1); ??
- ????????System.out.println(o1.getP1()?==?o3.getP1()); ??
- ????} ??
- ??
- ????public?static?Object?deepClone(Object?src)?throws?Throwable?{ ??
- ????????ByteArrayOutputStream?baos?=?new?ByteArrayOutputStream(); ??
- ????????ObjectOutputStream?oos?=?new?ObjectOutputStream(baos); ??
- ????????oos.writeObject(src); ??
- ????????oos.close(); ??
- ??
- ????????ByteArrayInputStream?bais?=?new?ByteArrayInputStream(baos.toByteArray()); ??
- ????????ObjectInputStream?ois?=?new?ObjectInputStream(bais); ??
- ??
- ????????Object?o?=?ois.readObject(); ??
- ????????ois.close(); ??
- ????????return?o; ??
- ????} ??
- ??
- ????public?static?class?C1?implements?Serializable?{ ??
- ??
- ????????C1?p1; ??
- ??
- ????????public?C1?getP1()?{ ??
- ????????????return?p1; ??
- ????????} ??
- ??
- ????????public?void?setP1(C1?p1)?{ ??
- ????????????this.p1?=?p1; ??
- ????????} ??
- ??
- ????} ??
- }?
其他的办法就是重写类里的cloneable方法了,自己实现深克隆