赛迪网 > IT技术 Java > (最新更新)Java基础
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

JAVA基础:关于bean-to-bean mapping

发布时间:2007.10.31 05:00     来源:赛迪网技术社区    作者:baocl

从一个对象图转换到另一个对象图。比如:

代码
  1. class Person{   
  2.   private String name;   
  3.   private Date birthdate;   
  4.    //getters and setters   
  5. }   
  6. class JobCategory{   
  7.   private String category;   
  8.   //getter and setter   
  9. }   
  10. class Adult extends Person {   
  11.   private Adult spouse;   
  12.   private Person[] kids   
  13.   private JobCategory jobCategory;   
  14.   //getters and setters   
  15. }   
  16. class PersonBean{   
  17.   private String name;   
  18.   private Date birthdate;   
  19.    //getters and setters   
  20. }   
  21.   
  22. class JobCategoryBean{   
  23.   private String categoryName;   
  24.   //getter and setter   
  25. }   
  26. class AdultBean extends PersonBean {   
  27.   private String name;   
  28.   private Date birthdate;   
  29.   private JobCategoryBean jobCategory;   
  30.   private AdultBean spouse;   
  31.   private List kids;   
  32.   //getters and setters   
  33. }   

假设AdultBean, PersonBean是从XMLBeans自动代码生成出来的,现在要把这些东西转换成Adult, Person, JobCategory这种对象树。

我理想的情况是,

代码
  1. AdultBean bean = ...;   
  2. Adult adult = new Adult();   
  3. BeanUtils.copy(adult, bean);   

然后所有的name, birthdate, jobcategory, spouse, kids都自动转换好了。不能手工转换么?当然能,问题是,当我们每个bean class有二十多个property,有七八种这种bean class,有从axis到xmlbeans,从xmlbeans到业务bean,从甲层到乙层等等等等的转换任务时,这种转换就是一种对程序员的摧残了。

我还以为这个需求不是特别特殊,应该有人遇到过的呢。

当然,我上面举的例子因为JobCategory.name和JobCategoryBean.categoryName这两个property明子不匹配,更一般地说,不是每个property都是那么一对一的,很可能有其它的匹配的不那么整齐的情况发生。

对这种情况,我的解决方法是写一个conversion class:

代码
  1. class AdultConversion{   
  2.   public static void convert(JobCategory cat, JobCategoryBean bean){   
  3.     cat.setName(bean.getCategoryName());   
  4.   }   
  5. }   

然后把这个conversion class传递给Beans这个facade:
代码
  1. AdultBean bean = ...;   
  2. Adult adult = new Adult();   
  3. Beans.copy(adult, bean, new AdultConversion());   

Beans会分析AdultConversion的meta data,发现存在一个客户自定义的从JobCategoryBean到JobCategory的转换方法,于是转换仍然可以成功。


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· spring 2.0自定义xml 标记 (二 如何实现) (10-30) · spring 2.0自定义xml 标记 (一 相关类) (10-30)
· 使用JMX监控应用程序内、外部的状况 (10-30) · java线程的缺陷 (10-30)
· Java Thread应注意的问题 (10-30) · J2EE基础--weblogic的几个基础问题 (10-30)
· 关于spring 2.0自定义xml 标记 (10-29) · 用apache james做简单的垃圾邮件过滤网关 (10-29)
· Tomcat5配置Mysql JDBC数据库连接池 (10-29) · J2EE基础:Servlet/JSP服务器端的重定向 (10-29)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 回顾ERP市场发展经历 提醒CIO选型需理性
· 网银系统拥堵 SOA从治病良方到罪魁祸首
· 国产ITIL运维先行者 四大厂商角力BI市场
· 金融行业GSN专题解决方案 企业网解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统