Complete Guide to Lombok

I am a Tech Enthusiast having 13+ years of experience in ๐๐ as a ๐๐จ๐ง๐ฌ๐ฎ๐ฅ๐ญ๐๐ง๐ญ, ๐๐จ๐ซ๐ฉ๐จ๐ซ๐๐ญ๐ ๐๐ซ๐๐ข๐ง๐๐ซ, ๐๐๐ง๐ญ๐จ๐ซ, with 12+ years in training and mentoring in ๐๐จ๐๐ญ๐ฐ๐๐ซ๐ ๐๐ง๐ ๐ข๐ง๐๐๐ซ๐ข๐ง๐ , ๐๐๐ญ๐ ๐๐ง๐ ๐ข๐ง๐๐๐ซ๐ข๐ง๐ , ๐๐๐ฌ๐ญ ๐๐ฎ๐ญ๐จ๐ฆ๐๐ญ๐ข๐จ๐ง ๐๐ง๐ ๐๐๐ญ๐ ๐๐๐ข๐๐ง๐๐. I have ๐๐๐๐๐๐๐ ๐๐๐๐ ๐๐๐๐ 10,000+ ๐ฐ๐ป ๐ท๐๐๐๐๐๐๐๐๐๐๐๐ and ๐๐๐๐ ๐๐๐๐๐ ๐๐๐๐ ๐๐๐๐ 500+ ๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐ in the areas of ๐๐จ๐๐ญ๐ฐ๐๐ซ๐ ๐๐๐ฏ๐๐ฅ๐จ๐ฉ๐ฆ๐๐ง๐ญ, ๐๐๐ญ๐ ๐๐ง๐ ๐ข๐ง๐๐๐ซ๐ข๐ง๐ , ๐๐ฅ๐จ๐ฎ๐, ๐๐๐ญ๐ ๐๐ง๐๐ฅ๐ฒ๐ฌ๐ข๐ฌ, ๐๐๐ญ๐ ๐๐ข๐ฌ๐ฎ๐๐ฅ๐ข๐ณ๐๐ญ๐ข๐จ๐ง๐ฌ, ๐๐ซ๐ญ๐ข๐๐ข๐๐ข๐๐ฅ ๐๐ง๐ญ๐๐ฅ๐ฅ๐ข๐ ๐๐ง๐๐ ๐๐ง๐ ๐๐๐๐ก๐ข๐ง๐ ๐๐๐๐ซ๐ง๐ข๐ง๐ . I am interested in ๐ฐ๐ซ๐ข๐ญ๐ข๐ง๐ ๐๐ฅ๐จ๐ ๐ฌ, ๐ฌ๐ก๐๐ซ๐ข๐ง๐ ๐ญ๐๐๐ก๐ง๐ข๐๐๐ฅ ๐ค๐ง๐จ๐ฐ๐ฅ๐๐๐ ๐, ๐ฌ๐จ๐ฅ๐ฏ๐ข๐ง๐ ๐ญ๐๐๐ก๐ง๐ข๐๐๐ฅ ๐ข๐ฌ๐ฌ๐ฎ๐๐ฌ, ๐ซ๐๐๐๐ข๐ง๐ ๐๐ง๐ ๐ฅ๐๐๐ซ๐ง๐ข๐ง๐ new subjects.
Introduction
Lombok is a Java library that helps reduce boilerplate code by automatically generating commonly used methods like constructors, getters, setters, toString, equals, hashCode, and more.
Different annotations
Different annotations in Lombok
Constructor
Getters and Setters
Other Useful Annotations
Constructor Annotations
There are 4 important constructor annotations
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
@Builder
@NoArgsConstructor
Required for frameworks like JPA, Jackson, and Hibernate.
Without Lombok API
public Employee() { }
With Lombok API
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class Employee {
private String name;
private int age;
}
@AllArgsConstructor(Constructor with All Fields)
Used to create fully initialized objects.
Without Lombok API
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
With Lombok API
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class Employee {
private String name;
private int age;
}
@RequiredArgsConstructor(Constructor for final or @NonNull Fields)
Generates a constructor for only required fields.
Without Lombok API
public Employee(String name) {
this.name = name;
}
With Lombok API
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class Employee {
private final String name;
private int age;
}
@Builder (Fluent Builder Pattern)
Useful for creating objects with optional parameters.
Without Lombok API
package com.module02.builder;
public class Employee {
private final String name;
private final int age;
private Employee(EmployeeBuilder builder) {
this.name = builder.name;
this.age = builder.age;
}
public static class EmployeeBuilder {
private String name;
private int age;
public EmployeeBuilder name(String name) {
this.name = name;
return this;
}
public EmployeeBuilder age(int age) {
this.age = age;
return this;
}
public Employee build() {
return new Employee(this);
}
}
public static EmployeeBuilder builder() {
return new EmployeeBuilder();
}
@Override
public String toString() {
return "Employee{name='" + name + "', age=" + age + "}";
}
}
# Main Class
Employee employee = Employee.builder().name("Naveen").age(38).build();
System.out.println(employee);
With Lombok
import lombok.Builder;
@Builder
public class Employee {
private String name;
private int age;
}
Getters and Setters Annotations
There are 3 important constructor annotations
@Getter@Setter@Data
@Getter (Generates Getter Methods)
Automatically generates getter methods.
Without Lombok
package com.module02.builder;
public class Employee {
private final String name;
private final int age;
private Employee(EmployeeBuilder builder) {
this.name = builder.name;
this.age = builder.age;
}
public static class EmployeeBuilder {
private String name;
private int age;
public EmployeeBuilder name(String name) {
this.name = name;
return this;
}
public EmployeeBuilder age(int age) {
this.age = age;
return this;
}
public Employee build() {
return new Employee(this);
}
}
public static EmployeeBuilder builder() {
return new EmployeeBuilder();
}
@Override
public String toString() {
return "Employee{name='" + name + "', age=" + age + "}";
}
}
# Main Class
Employee employee = Employee.builder().name("Naveen").age(38).build();
System.out.println(employee);
System.out.println(employee)
With Lombok API
import lombok.Getter;
@Getter
public class Employee {
private String name;
private int age;
}
@Setter (Generates Setter Methods)
Without Lombok API
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
With Lombok API
import lombok.Setter;
@Setter
public class Employee {
private String name;
private int age;
}
@Getter and @Setter on Specific Fields
If you want getters and setters for only some fields.
Without Lombok API
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
With Lombok API
import lombok.Getter;
import lombok.Setter;
public class Employee {
@Getter @Setter
private String name;
@Getter
private int age; // Read-only field
}
Restricting Getter and Setter Access
Control access level of getters and setters.
Without Lombok API
protected String getName() { return name; }
private void setAge(int age) { this.age = age; }
With Lombok API
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
public class Employee {
@Getter(AccessLevel.PROTECTED)
private String name;
@Setter(AccessLevel.PRIVATE)
private int age;
}
Other Useful Annotations
@ToString@EqualsAndHashCode@Value(Immutable class)@Builder@Slf4j
@Data (Combines Getters, Setters, and More)
Generates getters, setters,
toString(),equals(), andhashCode().
Without Lombok API
public class Employee {
private String name;
private int age;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
@Override
public String toString() { return "Employee{name='" + name + "', age=" + age + "}"; }
@Override
public boolean equals(Object obj) { ... }
@Override
public int hashCode() { ... }
}
With Lombok API
import lombok.Data;
@Data
public class Employee {
private String name;
private int age;
}
@ToString (Generates toString() Method)
Without Lombok API
@Override
public String toString() {
return "Employee(name=" + name + ", age=" + age + ")";
}
With Lombok API
import lombok.ToString;
@ToString
public class Employee {
private String name;
private int age;
}
@EqualsAndHashCode (Generates equals() and hashCode())
Used for object comparison.
Without Lombok API
@Override
public boolean equals(Object o) { ... }
@Override
public int hashCode() { ... }
With Lombok API
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class Employee {
private String name;
private int age;
}
@Value (Immutable Class)
Creates immutable objects (like DTOs).
With Lombok API
import lombok.Value;
@Value
public class Employee {
String name;
int age;
}
All fields are private final.
No setters are generated.
Generates getters,
toString(),equals(), andhashCode().
@Slf4j (Logger)
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class EmployeeService {
public void processEmployee() {
log.info("Processing employee...");
}
}



