一、简介
BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对javaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。
二、功能
1.spring的BeanUtils.copyProperties(obj1, obj2) 的方法
将obj1 的属性值 赋值 给 obj2 的对应属性,不同的属性不会进行赋值。
2.spring的PropertyUtils.copyProperties(obj1, obj2) 的方法
与BeanUtils.copyProperties(obj1, obj2) 方法类似,多提供了类型转换功能(即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围
内进行转换,如:java.util.Date是不被支持的,而它的子类java.sql.Date是被支持的);不过,效率差点。
3.Apache 的 commons组件 的copyProperties(aValue, aLocal)方法 从aLocal对象复制属性到aValue对象(据说:消耗很大)。
转载于:http://blog.csdn.net/shimiso
对象拷贝开源的解决方案,列出一些常见的如下:
Easy-mapper
这些框架在使用中或多或少都会存在一些问题:
1、扩展性不高,例如自定义的属性转换往往不太方便。
2、属性名相同、类型不匹配或者类型匹配、属性名不同,不能很好的支持。
3、不支持Java8的lambda表达式。
4、一些框架性能不佳,例如Apache的两个和Dozer(BeanCopier使用ASM字节码生成技术,性能会非常好)。
5、对象的clone拷贝往往并不是使用者需要的,一般场景引用拷贝即可满足要求。
6、部分拷贝还未实现,如:映射注册后,再次调整映射注册不了。