欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用CGLIB复制bean

程序员文章站 2022-07-07 18:56:17
...

 一、使用cglib进行对象复制的必要性

复制对象的方法有很多,比如手动set(比较麻烦),使用PropertyUtils或者使用BeanUtils。

BeanCopier的性能是PropertyUtils(apache-common)的504倍,而PropertyUtils的性能是BeanUtils的1.71倍。

可见对于对象的拷贝,应该尽量使用cglib的BeanCopier。

二、BeanCopier的使用

  • 对象属性名相同情况下的拷贝

       核心代码为

       使用CGLIB复制bean

class User{
    private Integer id;
    private String name;
    private String phoneNum;

    //get、set、toString方法(此处已省略)
}
class Student{
    private Integer id;
    private String name;
    private String phoneNum;

    //get、set、toString方法(此处已省略)
}

public class BeanCopierTest {
    public static void main(String[] args) {
        User user = new User();
        user.setId(1);
        user.setName("zhangsan");
        user.setPhoneNum("123456789");
        System.out.println(user);
        System.out.println("================");
        Student student = new Student();
        System.out.println(student);
        System.out.println("================");

        // public static BeanCopier create(Class source, Class target, boolean useConverter)
        BeanCopier beanCopier = BeanCopier.create(user.getClass(), student.getClass(), false);
        beanCopier.copy(user,student,null);
        System.out.println(student);
}

运行结果如下:

使用CGLIB复制bean

  • 对象属性名不同情况下

此处将上述Student类的phoneNum字段改为mobilePhoneNum

使用CGLIB复制bean

调试时发现当convert方法并不会执行else逻辑块,当比较完id和name后就退出了方法,所以,当字段名称不一样时无法完成复制。尝试着重写convert方法,结果也是徒劳无功。

 

相关标签: java基础