BeanUtils.copyProperties拷贝失败原因

BeanUtils.copyProperties拷贝失败的坑集合

一切皆有因果,这个失败的原因绝不会是平白出现的。在做项目的时候,我是因为copy失败后,因为赶进度并没有深入了解,就自己写了个copy的方法,其实重写的话可能更好,现在复盘下,我来深入查下原因。

百度了些观点,然后代码中进行相应的测试。

1 、 getter,setter 的原因

查看自己的代码,并没有问题,所以继续寻找原因

2、 两个包的搞混

Java - BeanUtils.copyProperties拷贝没成功的坑,记录解决原因!

文档观点:
在使用BeanUtils时,会先引用对应的包,但是如果包引用不对的话,那么使用BeanUtils.copyProperties(Object value1, Object value2)进行数据拷贝,可能是value1拷贝到value2上;也有可能是value2拷贝到value1上。导致的原因,我进行了测试,先是改了springframe框架自带的。然后改了apache的common的,然后经过测试,确实可能是有这个顺序的原因。
在这里插入图片描述

然后是都是可以实现copy的,可能自己那时操作失误的。apache下的是需要自己手动抛出异常的,顺序不同。

代码:

apache.commons.beanUtisl.BeanUtils
在这里插入图片描述

springFrameWork
在这里插入图片描述
BeanUtils.copyProperties拷贝失败原因

然后也有看了以上这篇文档的,然后他的观点是apache下的那个不能用,无效,我试了下确实是可以用的。

### 使用 `BeanUtils.copyProperties` 拷贝集合 当涉及到使用 Java 的 `BeanUtils.copyProperties` 来拷贝集合时,需要注意该方法本身并不直接支持集合类型的复制。此方法主要用于单个对象之间的属性拷贝[^2]。 为了实现列表或集合中多个对象的属性拷贝操作,通常的做法是遍历集合中的每一个元素并调用 `BeanUtils.copyProperties` 进行逐项处理: ```java import org.apache.commons.beanutils.BeanUtils; import java.util.ArrayList; import java.util.List; public class CopyUtil { public static <T, V> List<V> copyList(List<T> sourceList, Class<V> targetClass) throws Exception { List<V> resultList = new ArrayList<>(); for (T item : sourceList) { V newItem = targetClass.getDeclaredConstructor().newInstance(); BeanUtils.copyProperties(newItem, item); resultList.add(newItem); } return resultList; } } ``` 上述代码展示了如何创建一个新的目标类实例,并通过循环迭代原集合内的每一项来进行属性值的转移。这种方法适用于简单的 POJO 类型转换,在实际应用中应确保源对象和目的对象具有相同的属性名称以便自动映射生效[^3]。 另外值得注意的是,因为 `BeanUtils.copyProperties()` 是基于反射机制工作的,所以在高并发环境下或者大数据量情况下可能会影响程序效率。如果性能成为一个问题,则建议探索更为高效的替代方案,比如手动编写拷贝逻辑或是利用第三方库如 MapStruct 或 Dozer 等专门用于对象间映射的框架[^4]。 #### 性能优化提示 - 对于频繁使用的实体类之间转化,可以预先定义好映射关系减少运行期计算开销; - 如果两个类结构非常相似甚至完全一致,考虑采用序列化方式完成深克隆; - 针对特定业务需求定制化的解决方案往往能够带来更好的执行速度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值