1.apache BeanUtils 性能太差 日志太多

2.Apache PropertyUtils 性能可以参考,但是数据量大了比起Cglib 还是慢很多

3.Spring BeanUtils 上了一定的数量级别比较慢

4.Cglib BeanCopier 目前看来比较稳定

5.com.rits.cloning ,数量级别大了 也慢

package com.helloxin.restful.api;

import com.helloxin.restful.api.bo.CarBO;

import com.rits.cloning.Cloner;

import lombok.extern.slf4j.Slf4j;

import net.sf.cglib.beans.BeanCopier;

import org.apache.commons.beanutils.PropertyUtils;

import org.junit.Test;

import org.springframework.beans.BeanUtils;

import java.lang.reflect.InvocationTargetException;

import java.util.List;

import java.util.stream.Collectors;

import java.util.stream.IntStream;

@Slf4j

public class BeanCopyTest {

final static public Integer NUM = 10000;

@Test

public void beanSpringCopyTest() {

List list = createData(NUM);

long start = System.currentTimeMillis();

for(int i = 0;i< NUM;i++){

CarBO newCar = new CarBO();

BeanUtils.copyProperties(list.get(i), newCar);

}

log.info("duration={}", System.currentTimeMillis() - start);

}

@Test

public void beanCglibCopyTest() {

List list = createData(NUM);

long start = System.currentTimeMillis();

BeanCopier b = BeanCopier.create(CarBO.class, CarBO.class, false);

for(int i = 0;i< NUM;i++){

CarBO newCar = new CarBO();

b.copy(list.get(i), newCar, null);

}

log.info("duration={}", System.currentTimeMillis() - start);

}

@Test

public void beanApacheCopyTest() throws InvocationTargetException, IllegalAccessException {

List list = createData(NUM);

long start = System.currentTimeMillis();

BeanCopier b = BeanCopier.create(CarBO.class, CarBO.class, false);

for(int i = 0;i< NUM;i++){

CarBO newCar = new CarBO();

org.apache.commons.beanutils.BeanUtils.copyProperties(newCar,list.get(i));

}

log.info("duration={}", System.currentTimeMillis() - start);

}

@Test

public void beanApachePropertyUtilsCopyTest() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {

List list = createData(NUM);

long start = System.currentTimeMillis();

BeanCopier b = BeanCopier.create(CarBO.class, CarBO.class, false);

for(int i = 0;i< NUM;i++){

CarBO newCar = new CarBO();

PropertyUtils.copyProperties(newCar,list.get(i));

}

log.info("duration={}", System.currentTimeMillis() - start);

}

@Test

public void beanRitsCloningTest() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {

List list = createData(NUM);

long start = System.currentTimeMillis();

Cloner cloner = new Cloner();

for(int i = 0;i< NUM;i++){

cloner.deepClone(list.get(i));

}

log.info("duration={}", System.currentTimeMillis() - start);

}

private CarBO createData() {

return CarBO.builder().make("st").numberOfSeats(12).build();

}

private List createData(int num) {

return IntStream.range(0, num).mapToObj(i -> CarBO.builder().make("st").numberOfSeats(i).build()).collect(Collectors.toList());

}

}

java复制类mytool,JAVA Beans复制Utils比较相关推荐

  1. 使用maven根据JSON文件自动生成Java POJO类(Java Bean)源文件

    根据JSON文件自动生成Java POJO类(Java Bean)源文件 本文介绍使用程序jsonschema2pojo来自动生成Java的POJO类源文件,本文主要使用maven,其他构建工具请参考 ...

  2. pojo java,什么是java pojo类,java bean,普通类?

    Hi please dont say my question is duplicate :-) i saw all questions but didnt understand exact diffe ...

  3. java scanner类 构造器,Java Scanner类

    本文概述 Java的Scanner类可在java.util包中找到. Java提供了多种从键盘读取输入的方法, java.util.Scanner类就是其中之一. Java Scanner类使用默认为 ...

  4. JAVA工具类(17)--Java导入导出Excel工具类ExcelUtil

    实战 导出就是将List转化为Excel(listToExcel) 导入就是将Excel转化为List(excelToList) 导入导出中会出现各种各样的问题,比如:数据源为空.有重复行等,我自定义 ...

  5. 常用Java工具类:java抽奖码生成

    本案要求生成10W条由大写字母加数字组成的抽奖码. 由要求得字符集为:ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 为保证数据不重复,且不可破解的要求.阿咚使用5位的随机字 ...

  6. java jdbctype_JdbcType类型和Java类型的对应关系

    在Oracle中有些字段不是必填时在用户使用的时候会出现数据null的情况.这个时候在Oracle中是无法进行插入的. JDBC Type Java Type CHAR String VARCHAR ...

  7. java calculator类_Calculator.java

    package bdqn; import java.util.Scanner; public class Calculator { /* * 定义一个计算器类,包括加.减.乘.除运算. */ int ...

  8. java 普通类request_[Java教程]spring在普通类中获取session和request

    [Java教程]spring在普通类中获取session和request 0 2014-08-12 08:01:13 在使用spring时,经常需要在普通类中获取session,request等对像. ...

  9. java 比较器类_高级编程之(Java常用类(Java比较器))

    1.使用背景: 说明:Java中的对象,正常情况下,只能进行比较 == 或 !=.不能使用 > 或 < 但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小. 如何 ...

  10. java servlet类_[Java教程]与Servlet相关的类

    [Java教程]与Servlet相关的类 0 2017-08-31 17:00:15 有4个有关的类,通过servlet可以获得其中的三个,然后通过ServletConfig间接获取ServletCo ...

最新文章

  1. 利用SQL语句查找某数据库中所有存储过程包含的内容
  2. C#中读写Xml配置文件常用方法工具类
  3. 网银无法登录解决办法
  4. 《Starting with Starling》 Ep 1~11
  5. 数据库设计(一对一、一对多、多对多)
  6. drop sqlite 多个表_SQLite简介与安装
  7. 51单片机1602、18B20电子钟--C51源代码
  8. 解读30个提高Web程序执行效率的好经验
  9. 漫画:什么是字符集和编码?ASCII、UTF-8、UTF-16、UTF-32 又是什么?
  10. 几种方法帮你更有效率的记笔记
  11. 自动泊车停车位检测算法
  12. 红细胞识别matlab,图像处理—红细胞计数(Matlab).doc
  13. Android科大讯飞语音合成
  14. PCISPH的通俗解释与简单实现
  15. 大数据时代下的网络安全与数据隐私论文
  16. 运用awk提取日志文件中的IP地址
  17. Linux系统编程——Daemon进程
  18. TinyXML-2解析XML数据
  19. 微信小程序的key值
  20. the jar file has no source attachment解决方法

热门文章

  1. oracle转类型sql,[转]SQL Server 和Oracle 数据类型对应
  2. golang ide 环境搭建_新手引导 — Golang后端开发环境搭建
  3. 单元覆盖测试排除某些类烧苗_汽车嵌入式软件测试——嵌入式软件测试概述
  4. java 比较器_java比较器简略叙述
  5. C++头文件的若干说明和const对象定义
  6. 一种排序NYOJ 8
  7. android 隐藏系统音量的接口_Android9.0 系统默认配置清单
  8. python @符号_注意!大佬提醒你python初学者这几个很难绕过的坑,附教程资料
  9. 【UVA10129】Play on Words(欧拉回路+有向图连通性判断+打印欧拉道路)
  10. badboy html5,html5_ol.htm