对象属性复制几种方式的效率
Posted 刚入门的程序猿小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象属性复制几种方式的效率相关的知识,希望对你有一定的参考价值。
对象属性复制的三种方法:
1.Apache提供的BeanUtil.copyProperties和PropertyUtil.copyProperties两种方式
BeanUtils.copyProperties("转换后的类", "要转换的类"); //多一步类型转换,比PropertyUtils效率还差
PropertyUtils.copyProperties("转换后的类", "要转换的类");
口诀:后付钱(后付前:后面的复制给前面)会抛异常
2.spring提供的BeanUtil.copyProperties方式
BeanUtils.copyProperties("要转换的类", "转换后的类");
和Apache参数顺序相反
3.cglib提供的copy方式
BeanCopier copy=BeanCopier.create("要转换的类", "转换后的类", false);
copy.copy(from, to, null);
4.spring提供的copy方式
BeanCopier copy=BeanCopier.create("要转换的类", "转换后的类", false);
copy.copy(from, to, null);
1 /** 2 * Created by hunt on 2022/9/16. 3 */ 4 @Data 5 public class TestFrom 6 private String name; 7
1 import lombok.Data; 2 3 /** 4 * Created by hunt on 2022/9/16. 5 */ 6 @Data 7 public class TestTo 8 private String name; 9
Apache方式的BeanUtils效率测试代码:
1 import org.apache.commons.beanutils.BeanUtils; 2 3 import java.lang.reflect.InvocationTargetException; 4 5 /** 6 * Created by hunt on 2022/9/16. 7 */ 8 public class TestDemo 9 public static void main(String[] args) throws InvocationTargetException, IllegalAccessException 10 TestFrom testFrom = new TestFrom(); 11 testFrom.setName("hunt"); 12 TestTo testTo = new TestTo(); 13 long begin = System.currentTimeMillis(); 14 for (int i = 0; i <1000000 ; i++) //一百万次 15 BeanUtils.copyProperties(testTo,testFrom); 16 17 long end = System.currentTimeMillis(); 18 long mis = end -begin; 19 System.out.println("apache的BeanUtils.copyProperties耗时" + mis +"毫秒"); 20 System.out.println(testTo); 21 22
第一种Apache方式的BeanUtils和PropertyUtils效率测试为76467毫秒和2473毫秒
第二种Spring方式的BeanUtils效率测试为1120毫秒
第三种方式cglib的copy效率测试为505毫秒
第四种方式Spring的copy效率测试为390毫秒
以上是关于对象属性复制几种方式的效率的主要内容,如果未能解决你的问题,请参考以下文章