美文网首页
对比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