`

关于BeanUtil.copyProperties性能

 
阅读更多

BeanUtil.copyProperties 方法确实很方便,代码写出来非常优美,不会有很多的get set,但由于用到反射,可能存在潜在的性能问题。因此对spring 和 commons的BeanUtil.copyProperties进行了对照测试,代码大致如下:

Java代码  收藏代码
  1. @Test   
  2.     public   void  copyPropertiesTest()  throws  IllegalAccessException, InvocationTargetException {  
  3.           
  4.         po = new  PromotionPO();  
  5.         Timestamp now = new  Timestamp(System.currentTimeMillis());  
  6.         model = RetailmodelFactory.eINSTANCE.createPromotion();  
  7. //get/set   
  8.         Long startTime = System.currentTimeMillis();  
  9.         for  ( int  i =  0 ; i < LOOP_NUMBER; i++) {  
  10.             model.setCode("code" );  
  11.             model.setDescription("haha" );  
  12.             model.setDiscount(5.4 );  
  13.             model.setEndTime(now);  
  14.             model.setID(39578395L);  
  15.             model.setPriority(1 );  
  16.             model.setPromotionType(3 );  
  17.             model.setStartTime(now);  
  18.             model.setSupplierID("123245L" );  
  19.         }  
  20.         Long endTime = System.currentTimeMillis();  
  21.         traditionalCopyTIme = endTime - startTime;  
  22.           
  23. //spring   
  24.         startTime = System.currentTimeMillis();  
  25.         for  ( int  i =  0 ; i < LOOP_NUMBER; i++) {  
  26.             BeanUtils.copyProperties(model, po);  
  27.         }  
  28.         endTime = System.currentTimeMillis();  
  29.         springCopyPropertiesTime = endTime - startTime;  
  30.   
  31. //commons          
  32.         startTime = System.currentTimeMillis();  
  33.         for  ( int  i =  0 ; i < LOOP_NUMBER; i++) {  
  34.             org.apache.commons.beanutils.BeanUtils.copyProperties(po,model);  
  35.         }  
  36.         endTime = System.currentTimeMillis();  
  37.         commonsCopyPropertiesTime = endTime - startTime;  
  38.           
  39.         logger.info("normal copy Time: "  +  traditionalCopyTIme +  "ms." );  
  40.         logger.info("Spring BeanUtil copy Time: "  +  springCopyPropertiesTime +  "ms." );  
  41.         logger.info("Commons BeanUtil copy Time: "  +  commonsCopyPropertiesTime +  "ms." );  
  42.     }  


当 LOOP_NUMBER = 50000时(即执行50000次copy),结果如下:

编号 set/get Spring BeanUtil Commons BeanUtil
1 62ms 1703ms 63860ms
1 16ms 1359ms 62328ms
1 16ms 1359ms 63047ms
1 0ms 1390ms 63047ms
1 16ms 1375ms 62266ms



可看出Commons BeanUtil的copyProperties 性能最差,几乎不能忍受。spring的copyProperties有可能在接受范围内。直接set/get虽然丑陋,但是性能确实非常好,几乎可以忽略。
接下来对spring和commons两种不同实现进行分析。

分享到:
评论

相关推荐

    hutool框架代码

    一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件: 布隆过滤 缓存 克隆接口 类型转换 日期处理 ... 数据库ORM(基于ActiveRecord...

    BeanUtil.java

    BeanUtil.java

    BeanUtil框架完整包

    BeanUtil框架完整包

    BeanUtil.rar

    BeanUtil需要的jar包和源码文件,commons-beanutils-1.8.0.jar,commons-beanutils-1.8.0-javadoc.jar,commons-beanutils-1.8.0-sources.jar,commons-beanutils-bean-collections-1.8.0.jar,commons-beanutils-...

    bean和map之间转换的帮助类

    主要实现bean和map之间的相互转换,主要提供两个方法beanToMap将bean转换成Map 和mapToBean 将Map转换成bean 每次下载都没有积分,不差积分的大神赞助点呗 写了这一小段代码,供新手学习,大神就别拍砖了 身板弱扛...

    BeanUtil Jar包

    阿帕奇Apache提供的第三方JAR包,在反射技术中特别常用

    BeanUtil属性拷贝工具类

    BeanUtil属性拷贝工具类,支持基本的javabean属性拷贝,通过java反射和泛型编程实现了list属性拷贝

    BeanUtilities工具类使用jar包

    要使用根据请求自动填充Java对象,表单bean 使用的jar包,BeanUtilities工具类使用jar包

    java 匿名内部类的使用规范

    java 匿名内部类的使用规范 java 匿名内部类的使用规范 java 匿名内部类的使用规范

    commons-beanutils.jar

    commons-beanutils.jar.zip ,学习过程可能需要用到的jar包

    beanutil:JavaBean 工具类

    maven-repo&lt;/id&gt; &lt;url&gt;https://raw.github.com/lychie/maven-repo/master/releases&lt;/url&gt; &lt;/repository&gt;&lt;/repositories&gt;&lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.lychie&lt;/groupId&gt; &lt;artifactId&gt;beanutil&lt;/...

    msssqlserver.jar\jspsmartupload.jar\classes.jar\jsf--api\jsf-impl.jar

    standard.jar msutil.jar mssqlserver.jar msbase.jar jstl.jar jspsmartupload.jar jsf-impl.jar jsf-api.jar classes.jar commons-digester.jar commons-collections.jar commons-beanutil.jar

    J2EEwechat

    采用springMVC框架, public void save(PageData pd){ this.saveOrUpdate((T) BeanUtil.toBean(entityClass, pd)); }

    json.常用工具

    json开发工具jar包必备commons-colloections-3.2.1.jar commons-logging-1.1.1.jar commons-beanutil.jar commons-httpclient.jar commons-lang.jar ezmorph-1.0.6.jar json-lib-2.4-jdk15.jar morph-1.1.1.jar

    json-lib jar包 源代码

    里面包括要使用 json-lib 所要用到的所有包。另外还有 json-lib 的源码。可以在 eclipse 里查看源码。 commons-logging.jar commons-lang.jar commons-beanutil.jar commons-collections.jar ezmorph.jar

    beanutil数据库操作工具

    beanutil数据库操作工具,beanutil数据库操作工具

    BEANutil工具类,可获取生日

    BEANutil工具类,可获取生日,简单的几行代码,给需要的你。BEANutil工具类,可获取生日,简单的几行代码,给需要的你。

    java 读取csv 并转为Map<String,Object>

    通过引用【opevcsv】依赖,逐行读取数据 并转为Map,Object&gt;格式,后续可以通过BeanUtil.MaptoBean()方法将map转为你需要的bean对象; csv文件必须带表头,bean对象命名符合驼峰格式; 通过此方法可以快速的将文件...

Global site tag (gtag.js) - Google Analytics