解决BeanUtils和PropertyUtils的From对象里的null值会覆盖To对象里非空值的问题,提高复制效率和性能 如何高效率实现一个复制对象属性方法工具?

本文探讨了解决BeanUtils和PropertyUtils在复制对象时,null值覆盖非空值的问题,并提出提高复制效率和性能的方法。通过分析两者的工作原理,提出重写反射转换和使用高性能的ReflectASM库来实现更高效的对象属性复制。同时,针对BeanUtils和PropertyUtils存在的问题,提供了解决方案,确保非空值不被覆盖。
摘要由CSDN通过智能技术生成

解决BeanUtils和PropertyUtils的From对象里的null值会覆盖To对象里非空值的问题,提高复制效率和性能 如何高效率实现一个复制对象属性方法工具?

 

背景:

在商业项目中所需要的业务非常多,所以我们的业务数据也会有很多种,这个时候就会有什么VO,DTO,PO等等这些,把业务和我们的基础数据进行分离转换。但是一直都没有什么好一点的转换类。后来用了一下BeanUtils.copyPropertie,和PropertyUtils.copyProperties()的方法,发现其效率非常低。这里也简单总结了一下他们的用法及原理以及自己实现的转换类;

用法:

BeanUtils.copyProperties("转换后的类", "要转换的类");

PropertyUtils.copyProperties("转换后的类", "要转换的类");

用法其实很简单,第一个参数是转换后的类,第二个参数是待转换的类;我们可以理解成为后转前;

原理:

其原理是通过JDK自带的反射机制动态的去get,set,从而去转换我们的类。但是要注意一点他们所支持的数据类型,还有一个就是假如一个类里面又写了一个类,例如这种:

public class Name{

}

class Name1{

}

一般叫做内部类,像这种类进行转换的时候,是不会成功的。因为在里面进行读写校验的时候不会通过;

 

PropertyDescriptor[] origDescriptors =

               getPropertyDescriptors(orig);

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

               String name = origDescriptors[i].getName();

               if (isReadable(orig, name) && isWriteable(dest, name)) {

                   try {

                       Object value = getSimpleProperty(orig, name);

                       if (dest instanceof DynaBean) {

                           ((DynaBean) dest).set(name, value);

                       } else {

                               setSimpleProperty(dest, name, value);

                       }

             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值