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)是一套被反复使用.多数人知晓的.经过分类 ...
随机推荐
- 【转】html之file标签 --- 图片上传前预览 -- FileReader
记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了 ...
- 对 META标签 的一点点了解
①META标签是啥 META标签,是HTML语言head区的一个辅助性标签.在几乎所有的page里,我们都可以看 到类似下面这段html代码: ---------------------------- ...
- 如何做好Web接口测试
说说我在测试接口时遇到的一些需要注意的点: 1.接口返回:数据格式是否与预期一致.例如:要求返回json格式的数据,json数据的key命名是否正确,对应的value是否与数据库一致.需要转换的数据是 ...
- $一步一步学Matlab(4)——使用Matlab进行初等数学运算
Matlab可以看成是一个功能强大的计算器,那么既然是计算器,进行基本的数学运算绝对是必不可少的.本文主要讲解如何用Matlab做初等数学运算,所谓"初等数学运算",可以理解成是小 ...
- USBasp制作资料及全过程(菜鸟版)
源:USBasp制作资料及全过程(菜鸟版) 一.usbasp 的一般性介绍: 1.下载线,是“ISP”(In System Programmability:“在系统编程”)或“IAP”(In Appl ...
- web.xml servlet、servlet-mapping配置
Servlet常称为服务器端小程序,即运行在服务器端的程序,用于处理及响应客户的请求. Servlet类是个特殊的java类,继承于HttpServlet. --------------------- ...
- Flutter中集成Font Awesome
1.添加引用 在 pubspec.yaml文件中,加入 font awesome的引用 dependencies: flutter: sdk: flutter # The following adds ...
- SSM到Spring Boot-从零开发校园商铺平台
第1章 开发准备 本章包含课程介绍,同时讲解开发网站所需要准备的事情,并且带领大家从零开始搭建一个Maven Web. 1-1 课程导学 1-2 开发准备 第2章 项目设计和框架搭建 本章主要先带领大 ...
- JDK 中的监控与故障处理工具-01
当给系统定位问题的时候, 我们经常需要了解并分析 JVM 的运行时状态 . 那应该从哪些方面入手呢? 答案就是从数据入手 . 这里的数据包括: GC日志,异常堆栈, 线程快照(threaddump) ...
- You only look once
计算MAP https://www.zhihu.com/question/53405779 http://tarangshah.com/blog/2018-01-27/what-is-map-unde ...