一. 背景
由于每个人对对象映射的使用工具不一致,导致各个应用存在对象映射工具使用混杂多样,没有一个统一对象映射工具去规范使用,各个对象映射的工具性能也参差不齐;有的通过反射实现,比较损耗性能;有的会进行类型自动转换,容易导致数据问题,针对以上的一些问题,对对象映射框架进行一次调研。
二. 对象映射框架性能对比
工具 |
实现方式 |
star |
最近更新时间 |
说明 |
Getter/Setter |
getter/setter方法 |
属性很多时不好维护 |
||
Mapstruct |
getter/setter方法 |
6k |
2023-02-05 |
基于JSR269,在在编译期生成对象映射代码 |
Orika |
动态生成字节码 |
1.2k |
2022-07-13 |
基于javassist生成对象映射字节码,并加载生成的字节码文件 |
Spring BeanUtils |
反射机制 |
基于Spring反射工具类 |
||
BeanCopier |
基于ASM的MethodVisitor为field赋值 |
4.6k |
2022-02-08 |
使用ASM的MethodVisitor直接编写各属性的get/set方法 |
Dozer |
反射机制 |
2k |
2023-01-06 |
大量反射,主要基于Field.set(obj, obj)为field赋值 |
Apache BeanUtils |
反射机制 |
236 |
2023-02-25 |
|
ModelMapper |
反射机制 |
2.1k |
2022-12-08 |
1、压测
机器处理器:M1 Pro (10 核中央处理器和16 核图形处理器)
机器内存:32G
平均耗时/吞吐量(JMH基准测试预热3次,每次3秒,真正执行5次,每次3次)
工具 |
5个线程拷贝1w次 |