Using Lombok in Spring Boot to Reduce Boilerplate Code

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

  1. Add Lombok Dependency
    Add the Lombok dependency to your (for Maven) or build.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>
    
  2. 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.
  3. 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

  1. @Getter and @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;
    }
    
  2. @ToString
    Automatically generates a toString() method for the class.

    import lombok.ToString;
    
    @ToString
    public class User {
        private Long id;
        private String name;
    }
    
  3. @EqualsAndHashCode
    Generates equals() and hashCode() methods.

    import lombok.EqualsAndHashCode;
    
    @EqualsAndHashCode
    public class User {
        private Long id;
        private String name;
    }
    
  4. @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor
    Generates constructors:

    • @NoArgsConstructor: No-args constructor.
    • @AllArgsConstructor: All-args constructor.
    • @RequiredArgsConstructor: Constructor for required fields (final fields or fields with @NonNull annotation).
    import lombok.AllArgsConstructor;
    import lombok.NoArgsConstructor;
    import lombok.RequiredArgsConstructor;
    
    @NoArgsConstructor
    @AllArgsConstructor
    @RequiredArgsConstructor
    public class User {
        private Long id;
        @NonNull
        private String name;
    }
    
  5. @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;
    }
    
  6. @Builder
    Enables the builder pattern for the class.

    import lombok.Builder;
    
    @Builder
    public class User {
        private Long id;
        private String name;
    }
    
  7. @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

  1. Significant reduction in boilerplate code, making your classes cleaner and easier to read.
  2. Easier maintenance since redundant code is removed.
  3. Integration with Spring Boot makes it seamless to use.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.