java开发中beancopy比较
在java应用开发过程中不可避免的会使用到对象copy属性赋值。
1、常用的beancopy工具
组织(包)
|
工具类
|
基本原理
|
其他
|
---|---|---|---|
apache | PropertyUtils | java反射 | |
BeanUtils | java反射 | ||
Spring | BeanUtils | java反射 | |
cglib | BeanCopier | 动态代理 | 初始化代理类 |
2、用法举例
sourceBean
public
class
SourceBean{
public
SourceBean(
int
id,Sting name,String title){
this
.id=id;
tihs.name=name;
this
.title=title;
}
private
int
id;
private
string name;
private
String tilte;
}
dstBean
public
class
DstBean{
private
int
id;
private
string name;
private
String tilte;
private
String 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)是一套被反复使用.多数人知晓的.经过分类 ...
随机推荐
- 来自IOS开发工程师的零基础自学HTML5经验分享
移动互联网的火爆,而Html具有跨平台.开发快的优势,越来越受到开发者的青睐.感谢IOS开发工程师“小木___Boy”’带来的HTML5学习经验分享. 一.学习途径 1.很多视频网站 比如慕课.和极客 ...
- Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) A. Andryusha and Socks
地址:http://codeforces.com/contest/782/problem/A 题目: A. Andryusha and Socks time limit per test 2 seco ...
- Redhat 7.4更新为Centos7的yum并安装docker-ce
以下命令请在root下执行 #删除原有的yum rpm -qa|grep yum|xargs rpm -e --nodeps #install centos yum #wget http://mirr ...
- 多线程中sleep和wait的区别,以及多线程的实现方式及原因,定时器--Timer
1. Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即 ...
- [HNOI2019]校园旅行(构造+生成树+动规)
题目 [HNOI2019]校园旅行 做法 最朴素的做法就是点对扩展\(O(m^2)\) 发现\(n\)比较小,我们是否能从\(n\)下手减少边数呢?是肯定的 单独看一个颜色的联通块,如果是二分图,我们 ...
- 20145322《Java程序设计》第2次实验报告
20145322<Java程序设计>第2次实验报告 实验步骤与内容 一.实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4. ...
- zabbix3.2通过snmp v2采集Dell服务器iDRAC口信息监控硬件
模板下载 https://files.cnblogs.com/files/LuckWJL/zbx_export_templates.xml 模板源代码 <?xml version="1 ...
- 如何快速生成openwrt的差异配置项
答:./script/diff > defconfig 那么如何恢复添加的配置项呢? step 1:cat defconfig>>.config step 2:make defcon ...
- 防止XSS攻击的方式
主要有三种请求方式,进行过滤替换非法符号 1.普通的GET请求数据: 2.FORM表单提交数据: 3.Json格式数据提交: 把下面5个文件放入项目中即可 package com.joppay.adm ...
- <The old man and the sea>
Every day is a new day. It is better to be lucky. But i would rather be exact. Then when luck comes ...