Trois méthodes pour copier les propriétés d'un objet :
1. BeanUtil.copyProperties et PropertyUtil.copyProperties fournies par Apache
BeanUtils.copyProperties("Classe convertie", " Classe à convertir"); //Une étape de plus dans la conversion de type, encore moins efficace que PropertyUtils
PropertyUtils.copyProperties( "Classe convertie" , "Classe à convertir");
Astuce : Payer plus tard (payer plus tard) Recto : Ce dernier est copié au premier plan) lèvera une exception
2. Méthode BeanUtil.copyProperties fournie par spring
BeanUtils.copyProperties("La classe à convertir", "Classe convertie");
L'ordre des paramètres Apache est inversé
3. méthode fournie par cglib
BeanCopier copy=BeanCopier.create("Class to be convert", "Converted Class", false);
copy.copy(from, to, null);
4. La méthode de copie fournie par spring
BeanCopier copy=BeanCopier create(. "Classe à convertir", "Classe convertie", false);
copy.copy(de, à, null);
1 /**2 * Created by hunt on 2017/6/28.3 */4 @Data5 public class TestFrom {6 private String name;7 }
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 }
Test d'efficacité BeanUtils de la première méthode Apache :
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 }
Test d'efficacité PropertyUtils de la première méthode Apache :
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 }
Le deuxième test d'efficacité de la méthode 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 }
第三种方式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 }
第四种方式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 }
总结:这四种方式的效率是由低到高。(注意Apache的PropertyUtils不能进行类型转换的问题)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!