在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.classfalse);
    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,否性能会下降

    1.  
      测试性能,执行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

最新文章

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

热门文章

  1. cdoj1580 简单图论问题
  2. idea中 在接口中如何直接跳转到该接口的是实现类中?
  3. WeX5基础
  4. c++ 使用WinHTTP实现文件下载功能
  5. kali rolling 配置网络
  6. KVM配置及维护
  7. vscode + angular
  8. 复习指南(Pascal版)
  9. 03_Storm编程上手-wordcount
  10. session判断重复提交