post-image

Hướng dẫn sử dụng Lombok

Tổng quan

1. Lombok là gì?

Lombok là một thư viện Java giúp tự sinh ra các hàm setter/getter, hàm khởi tạo, toString… và tinh gọn chúng.

Thực tế thì hầu hết các IDE hiện này đều hỗ trợ sinh code tự động ví dụ như trên IntelliJ IDE, ta click chuột phải vào file cần sinh code và chọn Source và chọn các method cần sinh ra.

Tổng hợp 200+ tài liệu, sách, bài thực hành, video hướng dẫn lập trình… từ cơ bản đến nâng cao

public class UserChart { private String id; private String roleId; private String userName; private List<Chart> charts; private String tabName; private int order; private String type; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getRoleId() { return roleId; } public void setRoleId(String roleId) { this.roleId = roleId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public List<Chart> getCharts() { return charts; } public void setCharts(List<Chart> charts) { this.charts = charts; } public String getTabName() { return tabName; } public void setTabName(String tabName) { this.tabName = tabName; } public int getOrder() { return order; } public void setOrder(int order) { this.order = order; } public String getType() { return type; } public void setType(String type) { this.type = type; } }
Code language: JavaScript (javascript)

Tuy nhiên với những class mà có nhiều thuộc tính thì việc hiển thị các hàm getter/setter sẽ khiến cho class bị rối. Vì vậy Lombok sinh ra để khắc phục điều này. Chúng ta chỉ cần gắn annotation @Data sau khi đã cài đặt Lombok xong:

Hãy xem ví dụ sau, nhìn rất gọn gàng phải không?

TÀI LIỆU HỌC LẬP TRÌNH

@Data public class UserChart { private String id; private String roleId; private String userName; private List<Chart> charts; private String tabName; private int order; private String type; }
Code language: PHP (php)

2. Cài đặt Lombok

Để sử dụng các annotation của Lombok, ta thêm dependency của Lompok vào pom.xml:

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> <scope>provided</scope> </dependency>
Code language: HTML, XML (xml)

Hoặc có thể download tại https://projectlombok.org/download

Cài đặt Lombok với IntelliJ IDE

Chọn File -> Settings -> Plugins -> Marketplace -> tìm Lombok rồi cài đặt.

lombok

@Data sẽ có tác dụng generate ra Constructor rỗng hoặc có tham số theo yêu cầu (cái này sẽ nói sau), toàn bộ Get/Set, hàm equals, hashCode, toString()

Khi bạn đã đánh dấu 1 class là @Data, thì tại bất cứ đâu trong project. Khi sử dụng tới class này, nó sẽ tự có các function đã generate mà không cần code thêm bất kì dòng nào.

Trong trường hợp bạn muốn định nghĩa các Constructor theo ý mình, thì Lombok hỗ trợ 3 annotation:

  • @NoArgsConstructor: khởi tạo rỗng, đã đề cập ở trên.
  • @RequiredArgsConstructor: Hàm khởi tạo chứa tất cả thuộc tính.
  • @AllArgsConstructor: Hàm khởi tạo theo yêu cầu. Bạn chỉ muốn hàm khởi tạo có vài thuộc tính do bạn chọn thôi, thì bạn thêm final trước thuộc tính trong class, nó sẽ tự sinh ra Contructor như thế.
  • @Getter/@Setter: @Getter/@SetterKhi bạn chỉ muốn generate mỗi Get/Set thôi và không muốn dùng @Data vì nó quá nhiều chức năng, thì có thể dùng 2 annotation @Getter và @Setter.
  • @ToString: Tạo ra hàm toString() từ thuộc tính class.
  • @EqualsAndHashCode: Tạo ra hàm equals và hashCode.
  • @Builder: @Builder annotation trong project lombok sẽ giúp chúng ta triển khai Builder pattern mà không cần phải viết thêm bất kỳ đoạn code nào. @Builder có thể sử dụng trên class hoặc method.

3. Tổng kết

Việc giảm tải số lượng code giúp dễ đọc hơn, ít mã hơn cũng có nghĩa là nguy cơ bị lỗi ít hơn, và nếu bạn muốn tùy biến một thành phần nào đó như viết lại hàm toString() theo quy ước code của bạn thì trong quá trình biên dịch Lombok sẽ không tạo ra và ghi đè login code mà bạn đã thêm. Hi vọng bài viết này sẽ giúp ích bạn!

Chúc bạn thành công!

Leave a Reply

Your email address will not be published. Required fields are marked *