`

java bean copy 反射实现代码

    博客分类:
  • java
阅读更多
import java.lang.reflect.*;

public class BeanUtil2{


       /**


       @parameter Object obj1,Object obj2


       @return Object


       用到反射机制


       此方法将调用obj1的getter方法,将得到的值作为相应的参数传给obj2的setter方法


       注意,obj1的getter方法和obj2方法必须是public类型


       */


       public static Object CopyBeanToBean(Object obj1,Object obj2) throws Exception{


              Method[] method1=obj1.getClass().getMethods();


              Method[] method2=obj2.getClass().getMethods();


              String methodName1;


              String methodFix1;


              String methodName2;


              String methodFix2;


              for(int i=0;i<method1.length;i++){


                     methodName1=method1[i].getName();


                     methodFix1=methodName1.substring(3,methodName1.length());


                     if(methodName1.startsWith("get")){


                            for(int j=0;j<method2.length;j++){


                                   methodName2=method2[j].getName();


                                   methodFix2=methodName2.substring(3,methodName2.length());


                                   if(methodName2.startsWith("set")){


                                          if(methodFix2.equals(methodFix1)){


                                                 Object[] objs1=new Object[0];


                                                 Object[] objs2=new Object[1];


                                                 objs2[0]=method1[i].invoke(obj1,objs1);//激活obj1的相应的get的方法,objs1数组存放调用该方法的参数,此例中没有参数,该数组的长度为0


                                                 method2[j].invoke(obj2,objs2);//激活obj2的相应的set的方法,objs2数组存放调用该方法的参数


                                                 continue;                                    


                                          }


                                   }


                            }


                     }


              }


              return obj2;


       }


}


再建一个javabean,并测试


import java.lang.reflect.*;


public class User {


    private String name;


    private String id;  


    public void setName(String name){


        this.name=name;


    }


    public String getName(){


        return this.name;


    }


    public void setId(String id){


        this.id=id;


    }


    public String getId(){


        return this.id;


    }


    public static void main(String[] args) throws Exception{


        User u1=new User();


        u1.setName("zxb");


        u1.setId("3286");


        User u2=new User();


        u2=(User)BeanUtil2.CopyBeanToBean(u1,u2);


        System.out.println(u2.getName());


        System.out.println(u2.getId());           


    }


} 
分享到:
评论
2 楼 kuangbaoxu 2008-10-31  
恩 多谢!
1 楼 dayang2001911 2008-10-20  
可以看看apache的实现,看看开源的一些好代码

相关推荐

    java反射以及复制一个bean的值到另一个bean中。

    Java没有内置的深拷贝机制,但可以通过反射实现。假设我们有两个 `Person` 类的实例 `person1` 和 `person2`,我们想要将 `person1` 的属性值复制到 `person2`: ```java public static void copyBeanProperties...

    BeanMapper:比BeanUtils.copyProperties更快

    由于BeanUtils(Spring或Apache Commons)的copyProperties实现是利用反射实现的,它在大量调用时具有比较严重的性能问题。 BeanMapper通过javassist类库实现在运行时直接生成字节码来转换类,在首次生成后,后续...

    Simple-Bean-Utility:bean 反射的简单实用程序,如 *setter 、 *getter 、 *populate 、 *copy 、*reset 、 *newInstance

    总的来说,Simple-Bean-Utility通过提供一系列对Java Bean的反射操作,降低了开发难度,提高了代码质量,是Java开发者的得力工具。在日常工作中熟练掌握并运用此库,无疑可以提升开发效率,让Java Bean的处理变得...

    Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier

    它使用反射机制实现,通过getter和setter方法进行属性的读写。其优点在于简单易用,但缺点是在大量复制操作时性能较低,因为每次复制都需要进行反射调用。 PropertyUtils是Apache Commons BeanUtils的扩展,它增强...

    MapStruct Java实例Demo

    7. **性能优化**:MapStruct使用高效的代码生成,因此其性能通常优于基于运行时反射的映射库,如Dozer或ModelMapper。 8. **最佳实践**:在大型项目中,通常建议将映射接口组织在单独的模块或包中,以保持代码的...

    Java实现不同的类的属性之间相互赋值

    Java实现不同的类的属性之间...这篇文章讲解了如何使用 Java 实现不同的类的属性之间相互赋值,使用了 Java 的反射机制来实现属性之间的赋值。这种方法可以帮助我们在开发过程中快速实现属性之间的赋值,提高开发效率。

    java面试讲题汇总-word可打印版

    17. 反射允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。 18. Java序列化用于将对象转换为字节序列,便于存储和网络传输。当需要持久化对象或跨网络传输时需要序列化。 19. 克隆用于复制对象...

    commons-beanutis-1/7.0;collections-3.1;-httpclien;lang-2;logging

    - 其核心功能包括:自动类型转换,属性值的复制(Bean-to-Bean Copy),以及对Java Beans的反射操作。 - 版本1.7.0可能包含了一些性能优化和bug修复,具体细节需要查看该版本的发布说明。 2. **Apache Commons ...

    util类

    在Java编程中,"util"类通常指的是工具类,这些类包含了各种常用的功能,方便开发者在项目中快速实现特定功能,提高代码复用性。以下是对给定的压缩包文件中涉及的一些工具类的详细说明: 1. **BeanTool.java**: ...

    abc:'A'nother 'B'ean 'C'opier

    ABCAnother Bean Copier.本来想自己用反射来做一个,因为cglib使用了动态字节码生成,所以...2. 性能更好BeanCopy是一个比较常用的操作,我也自己通过反射实现了一个BeanCopy,经过调研,cglib的性能是最好的。1,000

    使用BeanUtils操作属性的一个小坑

    在Java开发中,Apache Commons BeanUtils库是一个非常实用的工具,它提供了许多便捷的方法来处理JavaBean对象,包括属性的复制、设置和获取等。然而,就像标题所指出的,“使用BeanUtils操作属性的一个小坑”,在...

Global site tag (gtag.js) - Google Analytics