GP Coder

Trang chia sẻ kiến thức lập trình Java

  • Java Core
    • Basic Java
    • OOP
    • Exception Handling
    • Multi-Thread
    • Java I/O
    • Networking
    • Reflection
    • Collection
    • Java 8
  • Design pattern
    • Creational Pattern
    • Structuaral Pattern
    • Behavior Pattern
  • Web Service
    • SOAP
    • REST
  • JPA
  • Java library
    • Report
    • Json
    • Unit Test
  • Message Queue
    • ActiveMQ
    • RabbitMQ
  • All
Trang chủ Java library Giới thiệu thư viện phổ biến của java – Project Lombok

Giới thiệu thư viện phổ biến của java – Project Lombok

Đăng vào 09/04/2018 . Được đăng bởi GP Coder . 11274 Lượt xem . Toàn màn hình

Nội dung

  • 1 Giới thiệu
  • 2 Cài đặt Project Lombok
  • 3 Sử dụng Lombok trong Project Java

Giới thiệu

Project Lombok là một công cụ giúp chúng ta generate code một cách tự động nhưng không phải giống như các IDE làm. Các IDE generate các phương thức Getter, Setter và một số phương thức khác trong các tập tin .java. Project Lombok cũng generate các phương thức đó nhưng là trong các tập tin .class file.

Lombok được sử dụng để giảm mã cho các đối tượng model/ entity. Lombok sử dụng chú thích (annotation) để đánh dấu các phương thức cần generate. Ví dụ: @Getter được sử dụng để tạo gettter cho các field, @Setter để tạo setter cho các field, …

Cài đặt Project Lombok

Để các IDE có thể hiểu được code do Project Lombok generate ra, chúng ta cần cài đặt Project Lombok plugin cho chúng.

Download thư viện lombok

Truy cập vào địa chỉ: https://mvnrepository.com/artifact/org.projectlombok/lombok/1.16.20

Chọn download gói jar:

Cài đặt Project Lombok cho Eclipse, Spring Tool Suite, (Red Hat) JBoss Developer Studio, MyEclipse

Double click lên file lombok.jar đã download ở trên -> Lombok sẽ tìm tất cả các eclipse trên máy tính của bạn để setup, nếu không tìm thấy bạn có thể chọn Specify location … và xác định đường dẫn đến thư mục eclipse.

Nhấn Install/ Update để cài đặt lombok:

Lưu ý: Nếu bạn vẫn không thể install từ UI ở trên, bạn có thể mở file elipse.ini nếu sử dụng eclipse hoặc STS.ini nếu sử dụng Spring Tool Suite, … trong thư mục cài đặt. Bạn thêm vào cuối file lệnh sau:

-javaagent:[path_to_lombok_jar/]lombok.jar

Đối với MacOS, một vài trường hợp lombok không hoạt động, các bạn cần cấu hình theo các bước sau:

  • Edit file: /Applications/Eclipse.app/Contents/Eclipse/eclipse.ini
<pre class="lang-java prettyprint prettyprinted">-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar</pre>
  • Paste lombok.jar vào folder: /Applications/Eclipse.app/Contents/MacOS/
  • Restart Eclipse
  • Chọn Project -> Clean

Cài đặt Project Lombok cho IntelliJ IDEA

Trên menu, chọn File > Settings > Plugins

Chọn Browse repositories… -> Tìm Lombok Plugin -> Nhấn Install plugin

Khởi động lại IntelliJ IDEA

Sử dụng Lombok trong Project Java

Tạo project Java sử dụng thư viện Project Lombok

Ngoài việc cài đặt Lombok cho IDE, bạn cần phải import thư viện này vào project của bạn.

Trong bài này, tôi sẽ tạo một Project Maven và khai báo thư viện lombok vào file pom.xml như sau:


<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.16.20</version>
	<scope>provided</scope>
</dependency>

Giới thiệu một số Annotation thường dùng của Project Lombok

@Getter/ @Setter: sẽ generate phương thức getter / setter cho các field.

  • Nếu bạn sử dụng Annotation này trên class, lombok sẽ tạo ra getter/ setter cho tất cả các field của class.
  • Nếu sử dụng trên field, lombok sẽ tạo getter/ setter chỉ cho field được đánh dấu.
  • Mặc định lombok sẽ generate các field có phạm vi truy cập là public. Bạn có thể thay đổi phạm vi truy cập này bằng cách xác định AccessLevel. Ví dụ xác định setter của field name là protected: @Setter(AccessLevel.PROTECTED) private String name;
  • Đôi khi bạn muốn generate getter/ setter tất cả các field của một class, nhưng loại từ một số field nhất định bằng cách xác định AccessLevel là NONE.

@ToString: sẽ generate phương thức toString().

@EqualsAndHashCode: sẽ generate phương thức hashCode() và equals().

@NoArgsConstructor: sẽ generate một hàm construct không có đối số.

@AllArgsConstructor: sẽ generate một hàm construct có đối số của tất cả field có trong class.

@Data: bao gồm các annotation @ToString, @EqualsAndHashCode, @Getter, @Setter.

@Builder: sẽ generate các phương thức để có thể khởi tạo một object theo Builder Pattern.

@Log: sẽ generate một log field thuộc lớp Logger.

  • @Log: sẽ sử dụng logger của lớp java.util.logging.Logger.
  • @Log4j: sẽ sử dụng logger của lớp org.apache.log4j.Logger.
  • @Slf4j: sẽ sử dụng logger của lớp org.slf4j.Logger.

Ngoài ra còn các Annotation khác bạn có thể tham khảo tại: https://projectlombok.org/features/all

Sử dụng Project Lombok

Ví dụ lớp Student khi không sử dụng Project Lombok, sử dụng generate code được hỗ trợ sẵn bởi IDE, ta có kết quả sau:


package com.gpcoder.non_lombok;

import java.util.Date;

public class Student {

	private Long id;

	private String name;

	private String clazz;

	private Date birthday;

	public Student() {
		super();
	}

	public Student(Long id, String name, String clazz, Date birthday) {
		super();
		this.id = id;
		this.name = name;
		this.clazz = clazz;
		this.birthday = birthday;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((birthday == null) ? 0 : birthday.hashCode());
		result = prime * result + ((clazz == null) ? 0 : clazz.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (birthday == null) {
			if (other.birthday != null)
				return false;
		} else if (!birthday.equals(other.birthday))
			return false;
		if (clazz == null) {
			if (other.clazz != null)
				return false;
		} else if (!clazz.equals(other.clazz))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", clazz=" + clazz + ", birthday=" + birthday + "]";
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getClazz() {
		return clazz;
	}

	public void setClazz(String clazz) {
		this.clazz = clazz;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}


Cũng lớp Student ở trên, nhưng chúng ta sẽ sử dụng các Annotation của Project Lombok


package com.gpcoder.lombok;

import java.util.Date;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {

	private Long id;

	private String name;

	private String clazz;

	private Date birthday;
}

Bạn có thể mở cửa sổ Outline của Eclipse để xem lại kết quả:

Như bạn thấy, Lombok đã generate các phương thức đầy đủ như chúng ta generate bằng IDE.

Sử dụng AccessLevel với Getter và Setter trong Project Lombok

Như đã giới thiệu ở trên, mặc định lombok sẽ generate các field có phạm vi truy cập là public. Bạn có thể thay đổi phạm vi truy cập này bằng cách xác định AccessLevel.

Một số giá trị của enum AccessLevel:

  • PUBLIC : genarate với phạm vi truy cập là public.
  • PROTECTED : genarate với phạm vi truy cập là protected.
  • PACKAGE : genarate với phạm vi truy cập là package.
  • PRIVATE : genarate với phạm vi truy cập là private.
  • NONE : không generate bất cứ gì.

Ví dụ tạo một lớp User với các yêu cầu sau:

  • Các thông tin id, username, birthday, avatar, address, … có phạm vi truy cập là public.
  • Thông tin password sẽ không cho phép xem (không có getter), chỉ cho phép cập nhật (có setter).
  • Thông tin email có phạm vi truy cập là protected.

package com.gpcoder.lombok;

import java.util.Date;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class User {

	private Long id;

	private String username;

	@Getter(AccessLevel.NONE)
	private String password;

	@Getter(AccessLevel.PROTECTED)
	@Setter(AccessLevel.PROTECTED)
	private String email;

	private Date birthday;

	private String avatar;

	private String address;

}

Các phương thức được Lombok generate như sau:

 

Builder Pattern với @Builder trong Project Lombok

Builder Pattern là một mẫu thiết kế được sử dụng để xây dựng một đối tượng phức tạp bằng cách sử dụng các đối tượng đơn giản và sử dụng tiếp cận từng bước.

Ví dụ tạo đối tượng UserProfile bằng cách sử dụng hàm contruct theo cách truyền thống:


package com.gpcoder.lombok.builder;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@AllArgsConstructor
@ToString
public class UserProfileEntity {
	
	private String name;

	private String language;

	private int experience;

}

Với Project Lombok, chúng ta có thể dễ dàng tạo đối tượng UserProfile theo Builder Pattern bằng cách sử dụng annotation @Builder như sau:


package com.gpcoder.lombok.builder;

import lombok.Builder;
import lombok.ToString;

@Builder
@ToString
public class UserProfileBuilder {
	
	private String name;

	private String language;

	private int experience;
	
}

Hãy xem cách sử khởi tạo của 2 cách trên:


package com.gpcoder.lombok.builder;

public class App {

	public static void main(String[] args) {
		UserProfileEntity entity = new UserProfileEntity("gpcoder", "Java", 5);
		System.out.println(entity);
		
		UserProfileBuilder builder = UserProfileBuilder.builder()
				.name("gpcoder")
				.language("Java")
				.experience(5)
				.build();
		System.out.println(builder);
	}

}

Trên đây là những giới thiệu cơ bản về sử dụng Project Lombok trong Java. Chương trình sử dụng Annotation của lombok sẽ đơn giản hơn rất nhiều, khi bạn thay đổi field, thêm, field, … bạn không cần phải update lại bằng tay các phương thức nữa, lombok sẽ tự động generate lại các phương thức cho chúng ta.

Cám ơn các bạn đã quan tâm và theo dõi bài viết. Hy vọng bài viết này giúp ích được cho các bạn, hẹn gặp lại ở các bài viết tiếp theo.

4.7
15
Nếu bạn thấy hay thì hãy chia sẻ bài viết cho mọi người nhé! Và Donate tác giả

Shares

Chuyên mục: Java library Được gắn thẻ: lombok

Hướng dẫn sử dụng thư viện Java Mail
Giới thiệu thư viện phổ biến của java – Commons Lang3

Có thể bạn muốn xem:

  • Tạo số và chuỗi ngẫu nhiên trong Java (15/09/2019)
  • Java Web Services – Jersey JAX-RS – REST và sử dụng REST API testing tools với Postman (10/06/2019)
  • Giới thiệu Google Guice – Dependency injection (DI) framework (04/02/2019)
  • Giới thiệu Google Guice – Aspect Oriented Programming (AOP) (14/02/2019)
  • Giới thiệu Feign – Tạo ứng dụng Java RESTful Client không thể đơn giản hơn (22/07/2019)

Bình luận

bình luận

Tìm kiếm

Bài viết mới

  • Clean code 13/01/2024
  • Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud 02/10/2020
  • Kết nối RabbitMQ sử dụng Web STOMP Plugin 19/06/2020
  • Sử dụng publisher confirm trong RabbitMQ 16/06/2020
  • Sử dụng Dead Letter Exchange trong RabbitMQ 13/06/2020

Xem nhiều

  • Hướng dẫn Java Design Pattern – Factory Method (97745 lượt xem)
  • Hướng dẫn Java Design Pattern – Singleton (97424 lượt xem)
  • Giới thiệu Design Patterns (87325 lượt xem)
  • Lập trình đa luồng trong Java (Java Multi-threading) (86025 lượt xem)
  • Giới thiệu về Stream API trong Java 8 (83488 lượt xem)

Nội dung bài viết

  • 1 Giới thiệu
  • 2 Cài đặt Project Lombok
  • 3 Sử dụng Lombok trong Project Java

Lưu trữ

Thẻ đánh dấu

Annotation Authentication Basic Java Behavior Pattern Collection Creational Design Pattern Cấu trúc điều khiển Database Dependency Injection Design pattern Eclipse Exception Executor Service Google Guice Gson Hibernate How to Interceptor IO Jackson Java 8 Java Core JDBC JDK Jersey JMS JPA json JUnit JWT Message Queue Mockito Multithreading OOP PowerMockito RabbitMQ Reflection Report REST SOAP Structuaral Pattern Swagger Thread Pool Unit Test Webservice

Liên kết

  • Clean Code
  • JavaTpoint
  • Refactoring Guru
  • Source Making
  • TutorialsPoint
  • W3Schools Online Web Tutorials

Giới thiệu

GP Coder là trang web cá nhân, được thành lập với mục đích lưu trữ, chia sẽ kiến thức đã học và làm việc của tôi. Các bài viết trên trang này chủ yếu về ngôn ngữ Java và các công nghệ có liên quan đến Java như: Spring, JSF, Web Services, Unit Test, Hibernate, SQL, ...
Hi vọng góp được chút ít công sức cho sự phát triển cộng đồng Coder Việt.

Donate tác giả

Tìm kiếm các bài viết của GP Coder với Google Search

Liên hệ

Các bạn có thể liên hệ với tôi thông qua:
  • Trang liên hệ
  • Linkedin: gpcoder
  • Email: contact@gpcoder.com
  • Skype: ptgiang56it

Follow me

Copyright 2025 © GP Coder · All Rights Reserved · Giới thiệu · Chính sách · Điều khoản · Liên hệ ·

Share

Blogger
Delicious
Digg
Email
Facebook
Facebook messenger
Flipboard
Google
Hacker News
Line
LinkedIn
Mastodon
Mix
Odnoklassniki
PDF
Pinterest
Pocket
Print
Reddit
Renren
Short link
SMS
Skype
Telegram
Tumblr
Twitter
VKontakte
wechat
Weibo
WhatsApp
X
Xing
Yahoo! Mail

Copy short link

Copy link