java开发中beancopy比较
在java应用开发过程中不可避免的会使用到对象copy属性赋值。
1、常用的beancopy工具
|
组织(包)
|
工具类
|
基本原理
|
其他
|
|---|---|---|---|
| apache | PropertyUtils | java反射 | |
| BeanUtils | java反射 | ||
| Spring | BeanUtils | java反射 | |
| cglib | BeanCopier | 动态代理 | 初始化代理类 |
2、用法举例
sourceBean
publicclassSourceBean{publicSourceBean(intid,Sting name,String title){this.id=id;tihs.name=name;this.title=title;}privateintid;privatestring name;privateString tilte;}dstBean
publicclassDstBean{privateintid;privatestring name;privateString tilte;privateString selfFiled;}
- 使用方式
public class testBeanCopy{ DstBean target = new DstBean(); SourceBean source = new SourceBean(123,"好好学习","天天向上"); public void testApache(){ try { long start1 = System.currentTimeMillis(); org.apache.commons.beanutils.PropertyUtils.copyProperties(target, source ); System.out.println("apache properyUtils--"+ (System.currentTimeMillis()-start1)+"ms"); System.out.println("target "+target); start1 = System.currentTimeMillis(); org.apache.commons.beanutils.BeanUtils.copyProperties(target, source); System.out.println("apache beanutil--"+ (System.currentTimeMillis()-start1)+"ms"); System.out.println("target "+target); } catch (Exception e) { e.printStackTrace(); } } public void testSpring(){ try { long start = System.currentTimeMillis(); BeanUtils.copyProperties(source, target); System.out.println("spring--"+(System.currentTimeMillis()-start)+"ms"); System.out.println("target "+target); } catch (Exception e) { e.printStackTrace(); } }//------cglib----private BeanCopier beanCopier = BeanCopier.create(SourceBean.class, DstBean.class, false); public void testCgLib(){ try { long start = System.currentTimeMillis(); beanCopier.copy(source, target, null); System.out.println("cglib--"+(System.currentTimeMillis()-start)+"ms"); System.out.println("target "+target); } catch (Exception e) { e.printStackTrace(); } }} |
输出结果,
cglib--0ms
cglib -- target DstBean [id=123, name=好好学习, title=天天向上]
spring--4ms
target DstBean [id=123, name=好好学习, title=天天向上]
apache properyUtils--46ms
target DstBean [id=123, name=好好学习, title=天天向上]
apache beanutil--1ms
target DstBean [id=123, name=好好学习, title=天天向上]
有兴趣的同学可以测试100次、1000次。10000次的结论
特别注意:cglib使用不要每次都创建beancopier,否性能会下降
测试性能,执行10000次
apache properyUtils–432ms
spring–309ms
apache beanutil--232ms
cglib--3ms
java copy--2ms建议:
1.如果字段少,使用get/set最快 ---java copy
2.字段多,调用不频繁,使用apache beanutil,最省事,静态方法拿来即用
3.字段多,调用频繁,使用cglib,需要创建BeanCopier
java开发中beancopy比较的更多相关文章
- paip.java 开发中web server的选择jboss resin tomcat比较..
paip.java 开发中web server的选择jboss resin tomcat比较.. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专 ...
- Java开发中常见的危险信号(中)
本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...
- Java开发中文件读取方式总结
JAVA开发中,免不了要读文件操作,读取文件,首先就需要获取文件的路径. 路径分为绝对路径和相对路径. 在文件系统中,绝对路径都是以盘符开始的,例如C:\abc\1.txt. 什么是相对路径呢?相对路 ...
- java开发中遇到的问题及解决方法(持续更新)
摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...
- Java开发中常见的危险信号(上)
本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...
- 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...
- 完整java开发中JDBC连接数据库代码和步骤[申明:来源于网络]
完整java开发中JDBC连接数据库代码和步骤[申明:来源于网络] 地址:http://blog.csdn.net/qq_35101189/article/details/53729720?ref=m ...
- Java 开发中的对象拷贝
前言 在 Java 开发中,很多时候需要将两个属性基本相同的对象进行属性复制,比如 DO 转 VO等等. 本文主要介绍自己实现的简易拷贝工具类与 Spring 提供的属性拷贝的对比. Spring 提 ...
- [ 转载 ] Java开发中的23种设计模式详解(转)
Java开发中的23种设计模式详解(转) 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...
随机推荐
- property函数的使用
描述 property函数的作用是在新式类中返回属性值 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改 s=Student() s.score= ...
- 08 网络配置、shh服务、bash命令和元字符
作业一:完成作业未做完的集群架构作业二:临时配置网络(ip,网关,dns)+永久配置 作业三:为集群内的机器设定主机名,利用/etc/hosts文件来解析自己的集群中所有的主机名,相应的,集群的配置应 ...
- 『NiFi 学习之路』把握 —— 架构及主要部件
一.概述 通过前面几篇文章的学习,相信你对 NiFi 有了一个基础性的了解. 数据处理和分发系统 是什么概念? NiFi 系统中数据的传递方式是怎样的? NiFi 的重要 Processor 有哪些? ...
- 2017 计蒜之道 初赛 第三场 D. 腾讯狼人杀 (点边都带权的最大密度子图)
点边都带权的最大密度子图,且会有必须选的点. 求\(\frac{\sum w_e}{k*(2n-k)}\)的最大值,其中k为子图点数 设\[h(g) = \sum w_e - g*(2nk-k^2)\ ...
- [转]Raanan Fattal - Image and Video Upscaling from Local Self-Examples 图像放大
转自:http://www.sigvc.org/bbs/thread-1032-1-1.html 论文链接:http://www.cs.huji.ac.il/~raananf/projects/lss ...
- $Python技巧大全
知乎上有一个问题:Python 有什么奇技淫巧?其中有各种不按套路出牌的招数,也不乏一些惊为天人的"奇技淫巧",会让你大呼:居然还有这种操作??? 本文就是对日常使用过的或者觉得很 ...
- 伪类 :after 清除浮动的原理和方法
浮动元素容器的clearing问题1. 问题的由来有这样一种情形:在一个容器(container)中,有两个浮动的子元素.<div> <div style=" ...
- LigerUI ligerComboBox 下拉框 表格 多选无效
$("#txt1").ligerComboBox({ width: 250, slide: false, selectBoxWidth: 500, selectBoxHeight: ...
- JS正则表达式从入门到入土(10)—— 字符串对象方法
字符串对象方法 search方法 String.prototype.search(reg) search方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,方法返回第一个匹配结果的 ...
- s3cmd安装
配置yum.repos cd /etc/yum.repos.d/ vim s3tools.repo [s3tools] name=Tools for managing Amazon S3 - Simp ...