java开发中beancopy比较
2024-08-28 17:18:38
在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
最新文章
- Android colors资源文件常用的颜色
- My 1st webUI try
- 偶的《javascript框架设计》终于出版
- WIN7管理工具配置ODBC数据源-系统DSN中无Oracle,Sybase驱动的解决方法
- 数据结构:后缀自动机 WJMZBMR讲稿的整理和注释
- SQL替换语句之批量修改、增加、删除字段内容
- ubuntu下安装kde Plasma
- Sublime 不自动打开上次未关闭的文件 设置方法
- 网络图片下载缓存库SDWebImage的使用
- placeholder 兼容IE9以下版本 包含pasword
- How to Enable or Disable a cell in DataGridview Row ?
- 分布式session
- iTunes Documents 文件共享指导手册
- sqlplus连接oracle问题
- AngularJS学习篇(十一)
- 小程序采坑系列-this.setData
- 51nod 1204 Parity(并查集应用)
- activemq+Zookeper高可用集群方案配置
- python基础-字符串(6)
- windows下载安装MariaDB10.2.17 绿色版