设为首页收藏本站language 语言切换
查看: 984|回复: 0
收起左侧

J2EE综合:如何实现javabean的属性拷贝

[复制链接]
发表于 2010-2-20 13:52:55 | 显示全部楼层 |阅读模式
<p >在struts的实践过程中,经常两个javabean交换数据的情况,如ActionForm与数据库中的表相关的bean交换数据。通常情况下要写很多get和set语句,一个个属性依次拷贝。这样的话,如此重复繁重的工作让程序员感觉不到编程的快乐。于是在网上查相关资料知,在apache.org有一个project:common-beanutil,提供的一个BeanUtil类,这个类有一个静态方法BeanUtil.copyProperties()实现了该功能。后来我在与java相关的书上知道的java的反射机制(reflect),偿试着并实现了两个javabean的属性拷贝功能。<BR>import java.lang.reflect.*;<BR>/**<BR>@author Xiaobo Zheng<BR>@date 2005-12-28<BR>*/<BR>public class BeanUtil2{<BR>       /**<BR>       @parameter Object obj1,Object obj2<BR>       @return Object<BR>       用到反射机制<BR>       此方法将调用obj1的getter方法,将得到的值作为相应的参数传给obj2的setter方法<BR>       注意,obj1的getter方法和obj2方法必须是public类型<BR>       */<BR>       public static Object CopyBeanToBean(Object obj1,Object obj2) throws Exception{<BR>              Method[] method1=obj1.getClass().getMethods();<BR>              Method[] method2=obj2.getClass().getMethods();<BR>              String methodName1;<BR>              String methodFix1;<BR>              String methodName2;<BR>              String methodFix2;<BR>              for(int i=0;i<method1.length;i++){<BR>                     methodName1=method1.getName();<BR>                     methodFix1=methodName1.substring(3,methodName1.length());<BR>                     if(methodName1.startsWith("get")){<BR>                            for(int j=0;j<method2.length;j++){<BR>                                   methodName2=method2[j].getName();<BR>                                   methodFix2=methodName2.substring(3,methodName2.length());<BR>                                   if(methodName2.startsWith("set")){<BR>                                          if(methodFix2.equals(methodFix1)){<BR>                                                 Object[] objs1=new Object[0];<BR>                                                 Object[] objs2=new Object[1];<BR>                                                 objs2[0]=method1.invoke(obj1,objs1);//激活obj1的相应的get的方法,objs1数组存放调用该方法的参数,此例中没有参数,该数组的长度为0<BR>                                                 method2[j].invoke(obj2,objs2);//激活obj2的相应的set的方法,objs2数组存放调用该方法的参数<BR>                                                 continue;                                    <BR>                                          }<BR>                                   }<BR>                            }<BR>                     }<BR>              }<BR>              return obj2;<BR>       }<BR>}<BR>再建一个javabean,并测试<BR>import java.lang.reflect.*;<BR>public class User {<BR>    private String name;<BR>    private String id;  <BR>    public void setName(String name){<BR>        this.name=name;<BR>    }<BR>    public String getName(){<BR>        return this.name;<BR>    }<BR>    public void setId(String id){<BR>        this.id=id;<BR>    }<BR>    public String getId(){<BR>        return this.id;<BR>    }<BR>    public static void main(String[] args) throws Exception{<BR>        User u1=new User();<BR>        u1.setName("zxb");<BR>        u1.setId("3286");<BR>        User u2=new User();<BR>        u2=(User)BeanUtil2.CopyBeanToBean(u1,u2);<BR>        System.out.println(u2.getName());<BR>        System.out.println(u2.getId());           <BR>    }<BR>}<BR>编译后并执行输出结果<BR>zxb<BR>3286<BR>成功!<BR><FONT face="Times New Roman"> </FONT><p align="center"></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-6 18:17 , Processed in 0.158073 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表