关于BeanCopier的一些思考
在做业务的时候,我们有时为了隔离变化,会将DAO查询出来的Entity,和对外提供的DTO隔离开来。大概90%的时候,它们的结构都是类似的,但是我们很不喜欢写很多冗长的b.setF1(a.getF1())这样的代码,于是我们需要BeanCopier来帮助我们。 BeanCopier 其实已经有很多开源版本,例如 DozerMapper 、 Apache BeanUtils 、 Spring 、 Jodd BeanUtils 甚至是 Cglib 都提供了这样的功能。在比较这些工具之前,我想先提提我对BeanCopier的一些要求。 1. 性能 BeanCopier是一个很常用的操作,如果是一个批量的请求,就更加明显了。使用效率太低的库不太划算,我对这些工具做了一个对比:Copy一个简单Bean 1,000,000次,计算总耗时(测试代码在 这里 )。比较结果如下: 1,000,000 round jdk set/get takes 17ms cglib takes 117ms jodd takes 5309ms dozer mapper takes 2336ms apche beanutils takes 6264ms 其中jdk的直接写set/get是最快的,所以在性能要求高的场景下倒是不妨自己写。另外这样写也是对重构比较友好,这是其他几个工具都做不到的。