一、常用的对象拷贝工具基本介绍
1、Apache commons-beanutils
2、Spring BeanUtils
3、cglib BeanCopier
4、HuTool BeanUtils
5、MapStruct
MapStruct – Java bean mappings, the easy way!
6、getter & setter
二、各组件分析
1、Apache commons-beanutils
参数顺序和其它的工具正好相反,导致使用不顺手,容易产生问题;
阿里巴巴代码扫描插件会给出明确的告警;
基于反射实现,性能较差;
不推荐使用;
2、Spring BeanUtils
基于内省+反射,借助getter/setter方法实现属性拷贝,性能比apache高;
在简单的属性拷贝场景下推荐使用;
3、cglib BeanCopier
通过动态代理的方式来实现属性拷贝;
性能高效;
在简单的属性拷贝场景下推荐使用;
4、HuTool BeanUtils
性能介于apache和Spring之间;
需要额外引入HuTool的依赖;
5、MapStruct
基于getter/setter方法实现属性拷贝,在编译时自动生成实现类的代码;
性能媲美getter & setter;
强大的功能可以实现深度拷贝;
缺点是需要声明bean的转换接口类;
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
<scope>compile</scope>
</dependency>
6、getter & setter
性能最高,但是需要手动拷贝;
三、总结
推荐使用顺序为:Apache commons-beanutils < HuTool < Spring < cglib < Mapstruct