公司系统中之前一直有使用组件进行Bean copy的操作,只是知道此操作对性能有影响,但是到底有多少影响心里一直没有数。现在对Bean copy进行测试获取量化的结果
目前Bean Copy的主流组件:
-
Apache BeanUtils
-
Spring BeanUtils
-
Cglib BeanCopier
众所周知Apache BeanUtils性能太差,一般不推荐使用。这里不对其进行测试,只测试后面两个组件
测试环境:
- JAVA8
- Spring Boot 2.1.4.RELEASE
- 本地普通台式机
测试代码:
测试功能 :循环N次,将TelAppModel 对象中的属性复制到TelAppDto中,统计每种组件花费的时间,花费时间越少的性能越强。
测试POJO类 源类 TelAppModel.java 和目标类 TelAppDto.java,两个类都是简单的pojo类且成员变量相同。
普通的Java set/get方法实现Bean Copy , 代码如下:
public static void copySetGet(TelAppModel source, TelAppDto target){
target.setId(source.getId());
target.setTelPowerSavingMode((byte)0);
target.setTelSecret(source.getTelSecret());
target.setTelAppId(source.getTelAppId());
target.setTelName(source.getTelName());
target.setDesc(source.getDesc());
}
复制代码
Spring BeanUtils实现Bean Copy 代码如下:
public static void copyPropertiesSpring(Object source, Object target){
BeanUtils.copyProperties(source, target);
}
复制代码
Cglib BeanCopier实现Bean Copy 代码如下:
public static void copyPropertiesCglib(Object source, Object target){
BeanCopier beanCopier = BeanCopier.create(source.getClass(), target.getClass(), false);
beanCopier.copy(source, target, null);
}
复制代码
测试代码 : longCount:定义复制执行的次数
// 在执行Bean copy前 先初始化 longCount 个TelAppModel,做为测试素材
for(int i = 0; i < longCount; i++){
appModelSourceList.add(createModel());
}
复制代码