Lombok is an excellent library for reducing boilerplate code in Java applications, including Spring Boot projects. It provides useful annotations that simplify mundane tasks like generating getters, setters, constructors, hashCode, equals, and toString methods.
Here’s how to use Lombok in a Spring Boot project to make your code cleaner and more concise:
Steps to Use Lombok in Spring Boot
- Add Lombok Dependency
Add the Lombok dependency to your (for Maven) orbuild.gradle(for Gradle).pom.xml
Maven:<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <!-- Check for the latest version --> <scope>provided</scope> </dependency> - Enable Annotation Processing
Ensure that annotation processing is enabled in your IDE (e.g., IntelliJ IDEA).
In IntelliJ IDEA:- Go to
File > Settings > Build, Execution, Deployment > Compiler > Annotation Processors. - Check
Enable annotation processing.
- Go to
- Add Lombok Annotations in Your Code
Use Lombok annotations in your classes to reduce boilerplate code. The most commonly used annotations are described below.
Commonly Used Lombok Annotations
-
@Getterand@Setter
Automatically generates getter and setter methods for your fields.import lombok.Getter; import lombok.Setter; @Getter @Setter public class User { private Long id; private String name; } @ToString
Automatically generates atoString()method for the class.import lombok.ToString; @ToString public class User { private Long id; private String name; }@EqualsAndHashCode
Generatesequals()andhashCode()methods.import lombok.EqualsAndHashCode; @EqualsAndHashCode public class User { private Long id; private String name; }@NoArgsConstructor,@AllArgsConstructor,@RequiredArgsConstructor
Generates constructors:@NoArgsConstructor: No-args constructor.@AllArgsConstructor: All-args constructor.@RequiredArgsConstructor: Constructor for required fields (final fields or fields with@NonNullannotation).
import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; @NoArgsConstructor @AllArgsConstructor @RequiredArgsConstructor public class User { private Long id; @NonNull private String name; }@Data
A shorthand annotation that combines@Getter,@Setter,@ToString,@EqualsAndHashCode, and@RequiredArgsConstructor.import lombok.Data; @Data public class User { private Long id; private String name; }@Builder
Enables the builder pattern for the class.import lombok.Builder; @Builder public class User { private Long id; private String name; }@Slf4j
Adds a static logger variable (log) for logging purposes.import lombok.extern.slf4j.Slf4j; @Slf4j public class UserService { public void performAction() { log.info("Performing some action..."); } }
Example: Lombok in a Spring Boot Entity
Below is an example of a Spring Boot entity class that uses Lombok annotations:
package com.example.demo.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Data
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
}
Logging Example
Service class adding logging with Lombok’s @Slf4j:
package com.example.demo.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class UserService {
public void processUser() {
log.info("Processing user...");
}
}
Advantages of Using Lombok
- Significant reduction in boilerplate code, making your classes cleaner and easier to read.
- Easier maintenance since redundant code is removed.
- Integration with Spring Boot makes it seamless to use.
