Kursinhalt
Java-Datenmanipulation mit Hibernate
Java-Datenmanipulation mit Hibernate
Automatische Generierung von Boilerplate-Code
Platzersparnis im Java-Code
Haben Sie jemals bemerkt, wie viele Boilerplate-Dinge es in jedem Java-Code gibt? Zum Beispiel, wenn Sie ein Modell schreiben, müssen Sie einen konstruktionslosen Konstruktor, einen Konstruktor mit Argumenten, Getter, Setter, die toString()
und hashCode()
Methoden überschreiben und vieles mehr deklarieren. Typischerweise nimmt dies 70+ Zeilen Code in Anspruch, was es schwierig macht, zusätzliche Logik in der Klasse zu erkennen, wenn sie vorhanden ist.
Fazit: Getter, Setter und zusätzliche Boilerplate-Konstruktionen können Ihren Code erheblich überladen. Es gibt jedoch eine Erweiterung, die dieses Problem effektiv löst - Project Lombok.
Lombok
Um mit Project Lombok zu beginnen, müssen wir es in die pom.xml
importieren (wenn Sie Maven verwenden):
Großartig, jetzt können wir beginnen, unseren Code zu verbessern.
Schauen wir uns einige der wichtigsten Anmerkungen an:
Getter und Setter
@Getter
und@Setter
: Generieren Standard-Getter und -Setter für ein Feld. Sie können auf Feldebene oder Klassenebene angewendet werden.
Konstruktoren
@NoArgsConstructor
: Generiert einen Konstruktor ohne Argumente;@RequiredArgsConstructor
: Generiert einen Konstruktor mit einem Parameter für jedes Feld, das spezielle Verarbeitung erfordert (wie Felder, die mit@NonNull
annotiert sind oder finale Felder);@AllArgsConstructor
: Generiert einen Konstruktor mit einem Parameter für jedes Feld der Klasse.
Schauen wir uns einige Codebeispiele an, wie diese Annotationen angewendet werden können.
Diese Annotationen sollten über einer Klasse platziert werden:
OldEmployee
package com.example; import java.util.Date; public class Employee { private int id; private String name; private String position; private double salary; private Date hireDate; public Employee() { } public Employee(int id, String name, String position, double salary, Date hireDate) { this.id = id; this.name = name; this.position = position; this.salary = salary; this.hireDate = hireDate; } public int getId() { return id; } public Employee(String name, String position, double salary) { this.name = name; this.position = position; this.salary = salary; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public Date getHireDate() { return hireDate; } public void setHireDate(Date hireDate) { this.hireDate = hireDate; } }
Wie Sie sehen können, sieht dieser Code ziemlich umfangreich aus, und es kann schwierig sein, darin etwas zu lesen, obwohl er strukturiert ist.
Lassen Sie uns ihn mit Hilfe von Lombok
-Annotationen verbessern:
improvedEmployee
package com.example; import lombok.*; import java.util.Date; @Getter @Setter @AllArgsConstructor @RequiredArgsConstructor public class Employee { private int id; @NonNull private String name; @NonNull private String position; @NonNull private double salary; private Date hireDate; }
Also, von 73 Zeilen haben wir es auf 25 reduziert. Jetzt können wir klar sehen, welche Felder in dieser Klasse sind, dass es Getter, Setter, einen Konstruktor gibt, der alle Argumente nimmt, und einen Konstruktor, der 3 Argumente nimmt: name
, position
und salary
.
Auf diese Weise haben wir den Code erheblich reduziert, während wir die gleiche Funktionalität beibehalten.
Zusätzliche Anmerkungen:
Project Lombok bietet auch zusätzliche Anmerkungen, wie z.B. für das Überschreiben von toString()
, equals()
und hashCode()
.
Schauen wir uns einige zusätzliche Anmerkungen an, die nützlich sein können:
Hier sind einige zusätzliche Anmerkungen im Markdown-Format:
Annotation | Beschreibung |
---|---|
@ToString | Generiert eine toString() -Methode für die Klasse. |
@EqualsAndHashCode | Generiert equals(Object other) und hashCode() -Methoden. |
@NonNull | Markiert ein Feld als nicht null-werte zulassend und generiert automatisch entsprechende Prüfungen. |
@Value | Markiert die Klasse als unveränderlich, fügt @Getter hinzu und macht alle Felder final und private . |
@Data | Kombiniert @Getter , @Setter und @RequiredArgsConstructor . |
Lassen Sie uns nun unseren Code weiter verbessern, indem wir @Getter
, @Setter
und @AllArgsConstructor
durch die @Data
-Annotation ersetzen, die vor dem class
Schlüsselwort platziert wird. Zusätzlich fügen wir die @ToString
und @EqualsAndHashCode
Anmerkungen hinzu.
Das Ergebnis wird der folgende Code sein:
ImprovedImprovedEmployee
package com.example; import lombok.*; import java.util.Date; @EqualsAndHashCode @ToString @RequiredArgsConstructor public @Data class Employee { private int id; @NonNull private String name; @NonNull private String position; @NonNull private double salary; private Date hireDate; }
Hinweis
Wir haben nicht alle Anmerkungen aus der Project Lombok-Bibliothek behandelt. Dieses Kapitel behandelt die Hauptanmerkungen und Funktionen dieser Bibliothek. In Zukunft, wenn wir eine spezifische Anmerkung verwenden müssen, die ich in diesem Kapitel nicht beschrieben habe, werde ich separat erklären, was diese spezielle Anmerkung bedeutet.
Zusammenfassend lässt sich sagen, dass Lombok ein mächtiges Werkzeug zur Optimierung von Java-Code ist, dessen Verwendung jedoch mit Vorsicht erfolgen sollte. Alle Änderungen werden während der Kompilierung vorgenommen, und Sie müssen das Lombok-Plugin in Ihrer integrierten Entwicklungsumgebung (IDE) installieren, um diese Änderungen zu sehen. Außerdem ist es erwähnenswert, dass übermäßiger Gebrauch von Lombok es schwierig machen kann, den Code zu lesen und zu debuggen, wenn Entwickler nicht an diesen Stil gewöhnt sind.
In unserem Kurs werden wir Lombok verwenden, da wir intensiv mit Entitäten arbeiten werden, die in Form von Modellklassen vorliegen.
1. Was ist der Hauptvorteil der Verwendung von Project Lombok in Java-Code?
2. Welches Maven-Abhängigkeitselement ist entscheidend, um den Umfang von Lombok in Ihrem Projekt zu definieren?
3. Was macht die Lombok-Annotation @NoArgsConstructor
?
4. Welche Lombok-Annotation wird verwendet, um alle Getter, Setter und erforderlichen Argumentkonstruktoren in einer Klasse einzuschließen?
5. Die @NonNull
-Annotation in Lombok wird verwendet, um:
Danke für Ihr Feedback!