BeanUtils.copyProperties Für den Frühling [BeanUtils.copyProperties](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/BeanUtils.html#copyProperties-java.lang.Object-java Es gibt eine bequeme Methode namens .lang.Object-). Es ist eine Methode, die den Inhalt eines Feldes mit demselben Namen von einer Bean in die andere kopiert. Das erste Argument ist die Kopierquelle und das zweite Argument ist das Kopierziel. Selbst wenn die Klassen unterschiedlich sind, ist das Kopieren möglich, wenn sie denselben Feldnamen haben.
** Buch
Klasse **
public class Book {
String code;
String name;
int price;
}
** Anwendungsbeispiel **
Book book1 = new Book();
book1.setCode("A");
book1.setName("Drei Königreiche");
book1.setPrice(500);
Book book2 = new Book();
BeanUtils.copyProperties(book1, book2);
Auf diese Weise werden die Werte "Code", "Name" und "Preis" von "Buch1" vollständig in "Buch2" kopiert.
Angenommen, Sie haben das folgende Formular und Dto.
** CreateBookForm ** Klasse
public class CreateBookForm {
String code;
String name;
int price;
}
** BookDto ** Klasse
public class BookDto {
String code;
String name;
int price;
String updateModule;
}
Das unschuldige Schreiben von "BeanUtils.copyProperties (createBookForm, bookDto)" in das Mapping "Form-> Dto" erhöht die Sterblichkeitsrate.
Angenommen, der Feldname von "CreateBookForm" wird aufgrund der Benutzerfreundlichkeit des Frontends von "Code" in "CD" geändert.
** CreateBookForm ** Klasse (nach Änderung)
public class CreateBookForm {
String cd;
String name;
int price;
}
Dadurch wird "cd-> code" nicht mehr kopiert. Dies liegt daran, dass die Feldnamen unterschiedlich sind. Dann sollten Sie den Feldnamen von "BookDto" ändern! Es mag eine Meinung geben, aber es ist nicht cool, dass sich die Änderungen in der für die Schichttrennung vorbereiteten Klasse gegenseitig beeinflussen.
Bei der Verwendung dieser Methode sollten meines Erachtens die folgenden Grundsätze eingehalten werden.
Diese genau gleichnamige Methode ist die Apache Commons Library Es existiert in .Object-java.lang.Object-). Darüber hinaus ist bei dieser Methode ** das zweite Argument die Kopierquelle und das erste Argument das Kopierziel **. Die Reihenfolge der Argumente ist umgekehrt zu der von Spring mit dem gleichen Namen! !! Beachten Sie, dass bei Verwendung des automatischen Bibliotheksimports in der IDE einige Klassen möglicherweise Spring aufrufen und einige Klassen möglicherweise Apaches copyProperties aufrufen, was unbemerkt und süchtig machen kann. Ich war süchtig danach.
Persönlich habe ich einen starken Eindruck von "von links nach rechts = vom ersten Argument zum zweiten Argument" in "Quelle kopieren-> Ziel kopieren", daher verwende ich immer das von Spring.
Recommended Posts