Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der drei Methoden zum Kopieren von Objektattributen

Detaillierte Erläuterung der drei Methoden zum Kopieren von Objektattributen

零下一度
零下一度Original
2017-06-29 11:20:593342Durchsuche

Drei Methoden zum Kopieren von Objekteigenschaften:

1. BeanUtil.copyProperties und PropertyUtil.copyProperties bereitgestellt von Apache

BeanUtils.copyProperties("Converted class ", " Zu konvertierende Klasse"); //Ein weiterer Schritt der Typkonvertierung, noch weniger effizient als PropertyUtils

PropertyUtils.copyProperties( "Converted class" , "Umzuwandelnde Klasse");

Tipp: Später bezahlen (später bezahlen) Vorderseite: Letztere wird kopiert nach vorne) löst eine Ausnahme aus

2. BeanUtil.copyProperties-Methode bereitgestellt von Spring

BeanUtils.copyProperties("Die zu konvertierende Klasse", "Konvertierte Klasse");

Die Reihenfolge der Apache-Parameter ist umgekehrt

3 von cglib bereitgestellte Methode

BeanCopier copy=BeanCopier.create("Klasse zu konvertieren", "Konvertierte Klasse", false);

copy.copy(from, to, null);

4. Die von Spring bereitgestellte Kopiermethode

BeanCopier copy=BeanCopier create( „Zu konvertierende Klasse“, „Konvertierte Klasse“, 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 }
Code anzeigen

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 }
Code anzeigen

BeanUtils-Effizienztest der ersten Apache-Methode:

 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 }
Code anzeigen

PropertyUtils-Effizienztest der ersten Apache-Methode:

 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 }
Code anzeigen

Der BeanUtils-Effizienztest der zweiten Spring-Methode:

 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 }
Code anzeigen

第三种方式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不能进行类型转换的问题)

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der drei Methoden zum Kopieren von Objektattributen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn