美文网首页
对比BeanUtils、PropertyUtils、BeanCo

对比BeanUtils、PropertyUtils、BeanCo

作者: 清酒一瓢不醉归 | 来源:发表于2019-03-05 22:14 被阅读0次

主要代码

定义2个bean对象:

public class copyPropertiesData1 {

private Integer id;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

}

public class copyPropertiesData2 {

private Integer id;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

}

分别使用BeanUtils、PropertyUtils、BeanCopier转化1000个对象:

import java.lang.reflect.InvocationTargetException;

import java.util.ArrayList;

import java.util.List;

import org.apache.commons.beanutils.BeanUtils;

import org.apache.commons.beanutils.PropertyUtils;

import net.sf.cglib.beans.BeanCopier;

public class copyPropertiesCompare {

    final static List<copyPropertiesData1> entityList;

    static{

        entityList  = new ArrayList();

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

            copyPropertiesData1 entity = new copyPropertiesData1();

            entityList.add(entity);

        }

    }

    //使用BeanUtils转化1000个对象

    public void test_convert_entity_to_model_performance_use_beanutils() throws IllegalAccessException, InvocationTargetException{

        long start = System.currentTimeMillis();

        List modelList = new ArrayList<>();

        for (copyPropertiesData1 src : entityList) {

            copyPropertiesData2 dest = new copyPropertiesData2();

            BeanUtils.copyProperties(src, dest);

            modelList.add(dest);

        }

        System.out.printf("BeanUtils took time: %d(ms)%n",System.currentTimeMillis() - start);

    }

    //使用PropertyUtils转化1000个对象

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

            long start = System.currentTimeMillis();

            List modelList = new ArrayList<>();

            for (copyPropertiesData1 src : entityList) {

                copyPropertiesData2 dest = new copyPropertiesData2();

                PropertyUtils.copyProperties(src, dest);

                modelList.add(dest);

            }

            System.out.printf("PropertyUtils took time: %d(ms)%n",System.currentTimeMillis() - start);

        }

    //使用BeanCopier转化1000个对象

    public void test_convert_entity_to_model_performance_use_beancopier(){

        long start = System.currentTimeMillis();

        BeanCopier b = BeanCopier.create(copyPropertiesData1.class, copyPropertiesData2.class, false);

        List modelList = new ArrayList<>();

        for (copyPropertiesData1 src : entityList) {

            copyPropertiesData2 dest = new copyPropertiesData2();

            b.copy(src, dest, null);

            modelList.add(dest);

        }

        System.out.printf("BeanCopier took time: %d(ms)%n",System.currentTimeMillis() - start);

    }

    public static void main(String[] args) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{

        copyPropertiesCompare test = new copyPropertiesCompare();

        test.test_convert_entity_to_model_performance_use_beanutils();

//      test.test_convert_entity_to_model_performance_use_PropertyUtils();

//      test.test_convert_entity_to_model_performance_use_beancopier();

    }

}

多线程调用:

import java.lang.reflect.InvocationTargetException;

import java.util.concurrent.ArrayBlockingQueue;

import java.util.concurrent.BlockingQueue;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.ThreadPoolExecutor;

import java.util.concurrent.TimeUnit;

public class ThreadPoolExecuteTest {

    public static void main(String[] args){

        BlockingQueue workQueue = new ArrayBlockingQueue<>(10, true);

        ExecutorService executorService = new ThreadPoolExecutor(10, 10, 1, TimeUnit.MINUTES, workQueue, new ThreadPoolExecutor.CallerRunsPolicy());

        for(int i=1;i<9999999;i++){

            executorService.execute(new ExecuteTtest());

        }

        executorService.shutdown();

    }

    static class ExecuteTtest implements Runnable {

        private ExecuteTtest() {

        }

    @Override

    public void run() {

        // TODO Auto-generated method stub

        try {

            System.out.println(Thread.currentThread().getName() + " thread start to work");

            copyPropertiesCompare test = new copyPropertiesCompare();

//            test.test_convert_entity_to_model_performance_use_beancopier();

//            test.test_convert_entity_to_model_performance_use_beanutils();

            test.test_convert_entity_to_model_performance_use_PropertyUtils();

        } catch (Exception e) {

            e.printStackTrace();

        }    }}}

结果

单笔调用耗时如下:

BeanUtils took time: 110(ms)

PropertyUtils took time: 5(ms)

BeanCopier took time: 75(ms)

并发调用消耗cpu情况

BeanUtils.copyProperties():

PropertyUtils.copyProperties():

cglib beans.BeanCopier():

相关文章

网友评论

      本文标题:对比BeanUtils、PropertyUtils、BeanCo

      本文链接:https://www.haomeiwen.com/subject/idmauqtx.html