(EzyPlatform) Sử dụng thư viện Lombok trong dự án xây dựng Blog
Giới thiệu về Lombok
Lombok là một thư viện của Java sử dụng để giảm thiểu mã soạn sẵn, giúp tiết kiệm thời gian của các nhà phát triển bằng cách sử dụng các chú thích (anotation). Ngoài ra, nó còn khiến mã nguồn dễ đọc và tiết kiệm không gian.
Khi sử dụng anotation của Lombok, các dòng code sẽ được tạo ra trước thời điểm biên dịch. Vì Lombok chỉ giúp cho các nhà phát triển viết mã gọn hơn, còn trước thời điểm biên dịch nó sẽ tạo ra đầy đủ mã nguồn.
Các chú thích thường sử dụng trong Lombok: @Getter, @Setter, @NoArgsConstructor, @AllArgsConstructor, @ToString, @EqualsAndHashCode, @Data, @Builder.
Getter và Setter
Các chú thích này cung cấp phương thức get và set một trường (thuộc tính) trong class. @Getter tạo ra một phương thức get với phạm vi truy cập là public, nó trả về giá trị của trường dữ liệu mà nó được khai báo, phương thức này có tên getName() nếu thuộc tính sử dụng nó có tên là “name”. @Setter tạo ra một phương thức set cho thuộc tính sử dụng nó, nó có phạm vi truy cập là public và kiểu trả về là void và nó nhận một tham số duy nhất để gán cho trường dữ liệu này, nó sẽ có tên là setName() nếu thuộc tính sử dụng nó có tên là “name”.
Sử dụng @Getter và @Setter trước các thuộc tính muốn áp dụng. Nếu muốn sử dụng @Getter hoặc @Setter cho tất cả các thuộc tính có trong class thì để chú thích này trước class.
VD: Sử dụng @Getter và @Setter cho các thuộc tính trong class:
public class Employee {
private @Getter @Setter Integer employeeId;
private @Getter @Setter String name;
private @Getter @Setter String company;
private @Getter @Setter String emailId;
}
@Getter trong class trên giúp lấy ra tất cả các thuộc tính có trong class:
NoArgsConstructor
Chú thích này được sử dụng để khởi tạo một hàm khởi tạo không đối số, chú thích này được sử dụng trước tên class.
AllArgsConstructor
Chú thích này tạo ra một hàm tạo có đầy đủ tham số, chú thích này được sử dụng trước tên class.
VD: Khi sử dụng chú thích này đoạn mã viết ra như sau:
Chú thích sẽ tạo ra một hàm khởi tạo như sau:
ToString
ToString: chú thích này được sử dụng để ghi đè phương thức toString(). Chúng ta có thể bỏ qua một số trường không sử dụng bằng cách chú thích @ToString.Exclude trước các trường không sử dụng. VD: @ToString.Exclude private String password;
@ToString
public class Person {
private String name;
private int age;
@ToString.Exclude
private String password;
public Person(String name, int age, String password) {
this.name = name;
this.age = age;
this.password = password;
}
public static void main(String[] args) {
Person person = new Person("John Doe", 30, "securepassword");
System.out.println(person.toString());
}
}
Ngoài ra chúng ta có thể khai báo các các thuộc tính không sử dụng bằng cách sau:
class Test {
@ToString(exclude = {"password","name"})
static class Person {
private String name;
private int age;
private String password;
public Person(String name, int age, String password) {
this.name = name;
this.age = age;
this.password = password;
}
}
public static void main(String[] args) {
Person person = new Person("Anh", 12, "clrscr");
System.out.println(person.toString());
}
}
Nếu chúng ta chỉ muốn sử dụng các trường dữ liệu cụ thể trong class, chúng ta có thể sử dụng cách sau:
class Test {
@ToString(of = {"name", "password"})
static class Person {
private String name;
private int age;
private String password;
public Person(String name, int age, String password) {
this.name = name;
this.age = age;
this.password = password;
}
}
public static void main(String[] args) {
Person person = new Person("Anh", 12, "clrscr");
System.out.println(person.toString());
}
}
Để sử dụng phương thức toString() có trong lớp cha, chúng ta có thể sử dụng như sau:
class Test {
@ToString(callSuper = true, of = {"name", "password"})
static class Person {
private String name;
private int age;
private String password;
public Person(String name, int age, String password) {
this.name = name;
this.age = age;
this.password = password;
}
}
public static void main(String[] args) {
Person person = new Person("Anh", 12, "clrscr");
System.out.println(person.toString());
}
}
EqualsAndHashCode
Chú thích này sử dụng để ghi đè phương thức equals() và hashCode(). Mặc định nó sử dụng tất cả các thuộc tính non-static và chúng ta có thể loại trừ một số thuộc tính bằng cách sử dụng @EqualsAndHashCode.Exclude trước các thuộc không muốn sử dụng chú thích này.
Chúng ta có thể chỉ định các trường cụ thể để sử dụng trong equals() và hashCode() bằng cách sử dụng thuộc tính of. Trong ví dụ dưới, trường "name" sẽ được sử dụng để so sánh và tính toán các giá trị hashcode.
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(of = {"name"})
public class Person {
private String name;
private int age;
// Constructor, getters, setters, etc.
}
Data
Chú thích này gói các chú thích: @ToString, @Getter, @Setter, @EqualsAndHashCode và @RequiredArgsConstructor thành một chú thích duy nhất.
Builder
Chú thích này có thể được sử dụng để loại bỏ các mã soạn sẵn liên quan đến việc thiết lập các thuộc tính cho một đối tượng. Với chú thích này các thuộc tính cài đặt cho một đối tượng có thể thực hiện trong một câu lệnh duy nhất. (Dùng các hàm để xác định thuộc tính cho đối tượng).
Sử dụng @Builder trong dự án:
Sử dụng @Builder để gán giá trị cho các thuộc tính
Dưới đây là đoạn một phần đoạn mã được tạo ra khi sử dụng @Builder
Tóm tắt: phần này hướng dẫn sử dụng Lombok giúp viết mã ngắn gọn hơn.
All rights reserved