使用CGLIB复制bean
程序员文章站
2022-07-07 18:56:17
...
一、使用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方法,结果也是徒劳无功。