commons 包的 BeanUtils 进行属性拷贝性能较差的真实案例,然后该同事换成了 Spring 的 BeanUtils 性能好了很多
在资源类和目标类属性类型不完全一致的时候,BeanUtils和CGlib 在不定义Converter 的情况下都可能会出现 类型转换异常
由于 Java 的泛型其实是编译期检查,编译后泛型擦除,导致运行时 List 和 List 都是 List 类型,可以正常赋值。这就导致在使用很多属性映射工具时,编译时不容易明显的错误。
mapstruct 自定义了注解处理器,在编译阶段可以读取映射双方的泛型类型,进而进行映射。但是这种映射也很可怕,有时候我们由于粗心等原因定义错了类型,自动帮助我们进行了转换,会带了很多副作用。
之前对各种属性映射工具的性能进行了简单的对比,结果如下: