又是一个反射的小问题 ;)

springlie 2009-03-15 04:06:37
拟用刚接触的反射重写一段代码。
源代码片段如下:

public ActionForward Add(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response){
String forward = "addFailed";
LinkmanForm f = (LinkmanForm)form;
System.out.println("-add- Linkman: "+f.getName());
TblLinkman linkman = new TblLinkman();

linkman.setName(f.getName());
linkman.setMobile(f.getMobile());
linkman.setEmail(f.getEmail());
linkman.setPhone(f.getPhone());
linkman.setAddr(f.getAddress());
linkman.setZipCode(f.getZipcode());
linkman.setFax(f.getFax());
TblLinkmanDAO linkmanDao = new TblLinkmanDAO();
linkmanDao.save(linkman);
linkmanDao.commit();
//.........................
}

如上,这是一段典型的Struts的Action类中的关于新增一条记录的代码。
现在想用反射技术将这段中的逻辑处理抽取出来一个新类,并不依赖于任何特定的DAO和FormBean。
这些POJO类名和DAO类名和FormBean类名都可以作为参数传入。
这里有一个问题——因为每个POJO类(FormBean类也一样)的属性都不同,setter和getter都是动态的。
现在想用一个办法有效地(不重复不遗漏)获得FormBean类每个属性的getter(或者说对应的POJO类的setter,一个道理)。
但是,比如上例,TblLinkman继承于AbstractTblLinkman而且实现了java.io.Serializable,而对应的form则是ActionForm的对象,因为无法知晓(至少是我菜鸟无法知晓)它们的实例中拥有多少父类的属性或者方法,所以使得我能想到的下列两种方法难以实施:
1 列举AbstractTblLinkman所有的数据域成员再加前缀(get/set)形成POJO的setter和DAO的getter。
2 列举FormBean类的所有以Set为前缀的方法,去掉两个(setMultipartRequestHandler和setServlet),得到FormBean的setter方法,然后就可以得出getter方法和对应的POJO类的setter方法。

不知高手们有什么好点的方法?最好大体说出想法,写出最关键的几句代码。谢谢!
希望我把我要问的说清楚了。:)
...全文
62 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
临远 2009-03-21
  • 打赏
  • 举报
回复
用dozer,commons-beanutils,cglib,都提供了这种复制属性的方法

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧