beans (相关操作类)--- BeanCopier
来源:互联网 发布:字模软件 编辑:程序博客网 时间:2024/06/05 18:57
- 许多网友都做过BeanCopier,BeanUtils的测试,基本BeanCopier的性能是BeanUtils的10倍以上。,出了反射这一性能差异外,BeanUtils默认是开启Converter功能,允许同名,不同类型的属性进行拷贝,比如Date对象到String属性。
- 有兴趣的同学可以去比较下PropertyUtils,默认不开启Converter功能,发现性能是BeanUtils的2倍多。
初始化例子:BeanCopier copier = BeanCopier.create(Source.class, Target.class, true);
第三个参数useConverter,是否开启Convert,默认BeanCopier只会做同名,同类型属性的copier,否则就会报错。
Converter使用例子代码
- public class BeanCopierTest {
- public static void main(String args[]) {
- System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "/tmp/1");
- BeanCopier copier = BeanCopier.create(Source.class, Target.class, true);
- Source from = new Source();
- from.setValue(1);
- Target to = new Target();
- Converter converter = new BigIntConverter();
- copier.copy(from, to, converter); //使用converter类
- System.out.println(to.getValue());
- }
- }
- class BigIntConverter implements net.sf.cglib.core.Converter {
- @Override
- public Object convert(Object value, Class target, Object context) {
- System.out.println(value.getClass() + " " + value); // from类中的value对象
- System.out.println(target); // to类中的定义的参数对象
- System.out.println(context.getClass() + " " + context); // String对象,具体的方法名
- if (target.isAssignableFrom(BigInteger.class)) {
- return new BigInteger(value.toString());
- } else {
- return value;
- }
- }
- }
- ----
- 反编译后看的代码:
- public class Target$$BeanCopierByCGLIB$$e1c34377 extends BeanCopier
- {
- public void copy(Object obj, Object obj1, Converter converter)
- {
- Target target = (Target)obj1;
- Source source = (Source)obj;
- // 注意是直接调用,没有通过reflect
- target.setValue((BigInteger)converter.convert(new Integer(source.getValue()), CGLIB$load_class$java$2Emath$2EBigInteger, "setValue"));
- }
- }
使用注意
- 避免每次进行BeanCopier.create创建对象,一般建议是通过static BeanCopier copier = BeanCopier.create()
- 合理使用converter。
- 应用场景:两个对象之间同名同属性的数据拷贝, 不能单独针对其中的几个属性单独拷贝
copy.copy(n, his, null);
0 0
- beans (相关操作类)--- BeanCopier
- net.sf.cglib.beans.BeanCopier用途
- 工具类BeanMap,BeanCopier
- BeanCopier
- net.sf.cglib.beans.BeanCopier用途 +参数解释
- Could not initialize class net.sf.cglib.beans.BeanCopier
- BeanCopier 浅复制工具类
- 对象拷贝类PropertyUtils,BeanUtils,BeanCopier
- 操作Beans的属性
- 对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
- 对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
- 对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
- 对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
- 对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
- 对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
- 对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
- 对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
- 对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
- Dubbo错误排查
- 几个支持SCORM的免费平台
- TRIANGLE_FAN 有破面的问题
- 第十六周项目2-有些数的阶乘不算了
- Android App整体架构设计的思考
- beans (相关操作类)--- BeanCopier
- 删除链表中重复的结点JAVA
- eclipse怎样生成javadoc
- linux 开机启动tomcat程序和jar程序
- Git Windows下安装配置
- 酷狗面试感想
- 如何从零开始开发一款嵌入式产品
- Codeforces551B:ZgukistringZ
- centos6.5 安装pomelo