欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  Java

详解对象属性复制的三种方法

程序员文章站 2022-03-25 18:39:14
...
对象属性复制的三种方法:

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 2017/6/28.3  */4 @Data5 public class TestFrom {6     private String name;7 }
View Code

详解对象属性复制的三种方法详解对象属性复制的三种方法
1 import lombok.Data;2 3 /**4  * Created by hunt on 2017/6/28.5  */6 @Data7 public class TestTo {8     private String name;9 }
View Code

第一种Apache方式的BeanUtils效率测试:

详解对象属性复制的三种方法详解对象属性复制的三种方法
 1 import org.apache.commons.beanutils.BeanUtils; 2  3 import java.lang.reflect.InvocationTargetException; 4  5 /** 6  * Created by hunt on 2017/6/28. 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 }
View Code

详解对象属性复制的三种方法

第一种Apache方式的PropertyUtils效率测试:

详解对象属性复制的三种方法详解对象属性复制的三种方法
 1 import org.apache.commons.beanutils.PropertyUtils; 2  3 import java.lang.reflect.InvocationTargetException; 4  5 /** 6  * Created by hunt on 2017/6/28. 7  */ 8 public class TestDemo { 9     public static void main(String[] args) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {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             PropertyUtils.copyProperties(testTo,testFrom);16         }17         long end = System.currentTimeMillis();18         long mis = end -begin;19         System.out.println("apache的PropertyUtils.copyProperties耗时" + mis +"毫秒");20         System.out.println(testTo);21     }22 }
View Code

详解对象属性复制的三种方法

第二种Spring方式的BeanUtils效率测试:

详解对象属性复制的三种方法详解对象属性复制的三种方法
 1 import org.springframework.beans.BeanUtils; 2  3 /** 4  * Created by hunt on 2017/6/28. 5  */ 6 public class TestDemo { 7     public static void main(String[] args) { 8         TestFrom testFrom = new TestFrom(); 9         testFrom.setName("hunt");10         TestTo testTo = new TestTo();11         long begin = System.currentTimeMillis();12         for (int i = 0; i <1000000 ; i++) {//一百万次13             BeanUtils.copyProperties(testFrom,testTo);//没抛异常14         }15         long end = System.currentTimeMillis();16         long mis = end -begin;17         System.out.println("Spring的PropertyUtils.copyProperties耗时" + mis +"毫秒");18         System.out.println(testTo);19     }20 }
View Code

详解对象属性复制的三种方法

第三种方式cglib的copy效率测试

详解对象属性复制的三种方法详解对象属性复制的三种方法
 1 import net.sf.cglib.beans.BeanCopier; 2  3 /** 4  * Created by hunt on 2017/6/28. 5  */ 6 public class TestDemo { 7     public static void main(String[] args) { 8         TestFrom testFrom = new TestFrom(); 9         testFrom.setName("hunt");10         TestTo testTo = new TestTo();11         long begin = System.currentTimeMillis();12         for (int i = 0; i <1000000 ; i++) {//一百万次13             BeanCopier copier = BeanCopier.create(TestFrom.class,TestTo.class,false);14             copier.copy(testFrom,testTo,null);15         }16         long end = System.currentTimeMillis();17         long mis = end -begin;18         System.out.println("cglib的copier.copy耗时" + mis +"毫秒");19         System.out.println(testTo);20     }21 }
View Code

详解对象属性复制的三种方法

第四种方式Spring的copy效率测试

详解对象属性复制的三种方法详解对象属性复制的三种方法
 1 import org.springframework.cglib.beans.BeanCopier; 2  3 /** 4  * Created by hunt on 2017/6/28. 5  */ 6 public class TestDemo { 7     public static void main(String[] args) { 8         TestFrom testFrom = new TestFrom(); 9         testFrom.setName("hunt");10         TestTo testTo = new TestTo();11         long begin = System.currentTimeMillis();12         for (int i = 0; i <1000000 ; i++) {//一百万次13             BeanCopier copier = BeanCopier.create(TestFrom.class,TestTo.class,false);14             copier.copy(testFrom,testTo,null);15         }16         long end = System.currentTimeMillis();17         long mis = end -begin;18         System.out.println("Spring的copier.copy耗时" + mis +"毫秒");19         System.out.println(testTo);20     }21 }
View Code

详解对象属性复制的三种方法

总结:这四种方式的效率是由低到高。(注意Apache的PropertyUtils不能进行类型转换的问题)

以上就是详解对象属性复制的三种方法的详细内容,更多请关注其它相关文章!