当前位置: 代码迷 >> Web前端 >> commons-beanutils组件里的copypropertyis跟cloneBean(原创)
  详细解决方案

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

热度:664   发布时间:2012-08-25 10:06:20.0
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. ????} ??
  47. }?

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

  相关解决方案