解决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);
}
} catch (NoSuchMethodException e) {

本文探讨了解决BeanUtils和PropertyUtils在复制对象时,null值覆盖非空值的问题,并提出提高复制效率和性能的方法。通过分析两者的工作原理,提出重写反射转换和使用高性能的ReflectASM库来实现更高效的对象属性复制。同时,针对BeanUtils和PropertyUtils存在的问题,提供了解决方案,确保非空值不被覆盖。
最低0.47元/天 解锁文章
2614

被折叠的 条评论
为什么被折叠?



