慎用BeanUtils的对象拷贝方法

javaWeb开发过程中,经常需要在领域类之间进行实体对象的拷贝操作,比如把Po类的属性值拷贝给Dto类。

BeanUtils这种工具类应用而生,比如org.apache.commons包中的BeanUtils就提供copyProperties(Object dest, Object orig)方法,它方便开发者快速在俩个对象之间进行字段值的拷贝。而且,拷贝条件非常简单:拷贝实体类之间只要保证字段名称一样即可。

尽管BeanUtils好用而且便捷,将开发者从繁重的get set操作中解放出来,但是笔者不太推荐使用他,原因有三。

1、字段名必须一样

虽然俩个拷贝类之间,需要拷贝的属性字段名必须要一样,当它们字段值不一样的时候,这时候就需要手动获取并赋值。当俩个实体类存在个别字段不一样时开发者容易忽视他,而忘记手动设置。

比如Po类的用户名叫 uName(数据库字段u_name),而Dto类因为是给其他模块调用的所以写有阅读意义的全程userName,这时候我们就必须手动设置
dtoObj.setUserName(poObj.getuName())

2、性能问题

BeanUtils内部实现采用的是反射功能,当反射的操作数量达到万级别的话,耗时非常明显。笔者亲自试过,对五万条数据进行拷贝操作,能明显感觉到卡顿。所以说BeanUtils是一个用性能换时间的得不偿失的买卖。

3、泛型擦除问题

在进行集合直接的数据拷贝时,因为泛型擦除问题,导致拷贝失效。比如我们需要将Po集合列表转化为Dto的集合,因为泛型擦除问题,最终得到的还是Po的集合。

你可能感兴趣的:(慎用BeanUtils的对象拷贝方法)