读书人

commons-beanutils组件里的copyproper

发布时间: 2012-08-25 10:06:20 作者: rapoo

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

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

想用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方法了,自己实现深克隆

读书人网 >Web前端

热点推荐