使用CGLIB复制bean

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

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

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

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

二、BeanCopier的使用

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

       核心代码为

       

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);
}

运行结果如下:

  • 对象属性名不同情况下

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

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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值