千家信息网

Bean复制的几种方法介绍

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要讲解了"Bean复制的几种方法介绍",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Bean复制的几种方法介绍"吧!4 种复制方法:Apach
千家信息网最后更新 2025年01月23日Bean复制的几种方法介绍

这篇文章主要讲解了"Bean复制的几种方法介绍",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Bean复制的几种方法介绍"吧!

4 种复制方法:

  • Apache BeanUtils

  • Apache PropertyUtils

  • Spring BeanUtils

  • Cglib BeanCopier

测试 Bean,FromBean 与 ToBean 属性一致

public class FromBean {    private String name;    private int age;    private double money;     public double getMoney() {        return money;    }    public void setMoney(double money) {        this.money = money;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}

测试方法

import org.apache.commons.beanutils.BeanUtils;import org.apache.commons.beanutils.PropertyUtils;import org.springframework.cglib.beans.BeanCopier;public class Test {        public static void main(String[] args) {                FromBean fb = new FromBean();                fb.setAge(20);                fb.setMoney(30000.111);                fb.setName("测试");                int count = 10;                convert((tb) -> BeanUtils.copyProperties(tb, fb), count, "Apache BeanUtils.copyProperties");                convert((tb) -> PropertyUtils.copyProperties(tb, fb), count, "Apache PropertyUtils.copyProperties");                convert((tb) -> org.springframework.beans.BeanUtils.copyProperties(fb, tb), count, "Spring BeanUtils.copyProperties");                BeanCopier bc = BeanCopier.create(FromBean.class, ToBean.class, false);                convert((tb) -> bc.copy(fb, tb, null), count, "Cglib BeanCopier.copy");        }        public static void convert(ConvertBean cb, int count, String type) {                try {                        System.out.println(type + "开始进行测试");                        long start = System.currentTimeMillis();                        for (int i = 0; i < count; i++) {                                ToBean tobean = new ToBean();                                cb.convertMethod(tobean);                                System.out.println(tobean.getAge());                                System.out.println(tobean.getMoney());                                System.out.println(tobean.getName());                        }                        System.out.println("耗时 " + (System.currentTimeMillis() - start) + " ms");                        System.out.println("----------------------");                } catch (Exception e) {                        System.out.println("Exception: " + e.getMessage());                        e.printStackTrace();                }        }}@FunctionalInterfaceinterface ConvertBean {        void convertMethod(ToBean tb) throws Exception;}

打印结果

Apache BeanUtils.copyProperties开始进行测试耗时 1178 ms----------------------Apache PropertyUtils.copyProperties开始进行测试耗时 5 ms----------------------Spring BeanUtils.copyProperties开始进行测试耗时 172 ms----------------------Cglib BeanCopier.copy开始进行测试耗时 0 ms----------------------

测试结果

单位:ms

count:10

次数:10第一次第二次第三次第四次平均值单次平均值
Apache BeanUtils1178102991710191035.75103.575
Apache PropertyUtils54845.250.525
Spring BeanUtils172257123135171.7517.175
Cglib BeanCopier000000

count:100

次数:100第一次第二次第三次第四次平均值单次平均值
Apache BeanUtils18681258162412601502.515.025
Apache PropertyUtils1610181715.250.1525
Spring BeanUtils193152209215192.251.9225
Cglib BeanCopier000000

count:10000

次数:10000第一次第二次第三次第四次平均值单次平均值
Apache BeanUtils16111657178615721656.50.16565
Apache PropertyUtils243641941111530.0153
Spring BeanUtils5512174334314080.0408
Cglib BeanCopier106376.50.00065

结论

  • 数量越大平均每次耗时越少

  • 综合 Cglib BeanCopier 性能最好,但在使用前,要先用 BeanCopier.create 定义

Cglib在测试的时候,先进行了实例的缓存,这个也是他性能较好的原因

Spring BeanUtils 不能转化 java.util.Date,可以支持它的子类 java.sql.Date

感谢各位的阅读,以上就是"Bean复制的几种方法介绍"的内容了,经过本文的学习后,相信大家对Bean复制的几种方法介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0