First Step to Lombok Annotations
1. Overview
Do you feel bored of writing the same boilerplate and repetitive code in Java again and again ?
So this is what Lombok Project was made for, it helps you to prevent bothering yourself from writing this ugly repetitive code, and instead replace it with some meaningful annotations, so you will end up with a clean and good looking source code. 🙂

In this article, i will show you how to use Lombok with some basic examples.
2. Setup Lombok
1. To be able to use Lombok in your project, add the following dependency to your pom.xml.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<version>1.16.20</version>
</dependency>
2. And add the Lombok plugin to your IDE to be able to deal with Lombok annotations.
- Lombok plugin for IntelliJ IDEA : projectlombok.org/setup/intellij
- Lombok plugin for Eclipse and STS : projectlombok.org/setup/eclipse
Visit Project Lombok official website for other IDEs.
3. Use Lombok
3.1. @NonNull
Adding @NonNull on the parameter of a method generates a null check statement for these parameter.
With Lombok :
public class NonNullHelloWorld {
public void doSomething(@NonNull String input) {
input.length();
}
}
Without Lombok :
public class NonNullHelloWorld {
public void doSomething(String input) {
if (input == null) {
throw new NullPointerException("input");
}
input.length();
}
}
3.2. @Getter and @Setter
Add @Getter and/or @Setter to an attribute to generate getter and setter for it.
With Lombok :
public class GetterSetterHelloWorld {
@Getter @Setter
private String firstAttribute;
@Getter
private String secondAttribute;
}
Without Lombok :
public class GetterSetterHelloWorld {
private String firstAttribute;
private String secondAttribute;
public String getFirstAttribute() { ... }
public void setFirstAttribute(String firstAttribute) { ... }
public String getSecondAttribute() { ... }
}
3.3. @ToString
Use @ToString to generate under the hood the toString() method for your classes.
With Lombok :
@ToString
public class ToStringHelloWorld {
private String firstAttribute;
}
Without Lombok :
public class ToStringHelloWorld {
private String firstAttribute;
public String toString() {
return "ToStringHelloWorld(firstAttribute=" + this.firstAttribute + ")";
}
}
There is alsoÂ
@EqualsAndHashCodethat do exactly the same but withequals()andhashCode()methods.
3.4. @Data
the @Data annotation is equivalent to the @Getter, @Setter, @ToString and @EqualsAndHashCode together, it generates getters, setters, toString, equals and hashCode methods for your classes.
With Lombok :
@Data
public class DataHelloWorld {
private String firstAttribute;
private String secondAttribute;
}
Without Lombok :
public class DataHelloWorld {
private String firstAttribute;
private String secondAttribute;
public String getFirstAttribute() {
//...
}
public String getSecondAttribute() {
//...
}
public void setFirstAttribute(String firstAttribute) {
//...
}
public void setSecondAttribute(String secondAttribute) {
//...
}
public boolean equals(Object o) {
// ...
}
public int hashCode() {
//...
}
public String toString() {
//...
}
}
3.5. @Value
The @Value is similar to @Data, the main difference between them is @Value generates an immutable class.
With Lombok :
@Value
public class ValueHelloWorld {
private String firstAttribute;
private String secondAttribute;
}
Without Lombok :
public final class ValueHelloWorld {
private final String firstAttribute;
private final String secondAttribute;
public ValueHelloWorld(String firstAttribute, String secondAttribute) {
this.firstAttribute = firstAttribute;
this.secondAttribute = secondAttribute;
}
public String getFirstAttribute() {
//...
}
public String getSecondAttribute() {
//...
}
public boolean equals(Object o) {
//...
}
public int hashCode() {
//...
}
public String toString() {
//...
}
}
3.6. @Log and @Slf4j
The @Log, @Slf4j and @CommonsLog annotations add a Logger to your class.
With Lombok :
@Slf4j
public class Slf4jHelloWorld {
public void doSomething() {
log.info("This is a message from Lombok @Slf4j");
}
}
Without Lombok :
public class Slf4jHelloWorld {
private static final Logger log = LoggerFactory.getLogger(Slf4jHelloWorld.class);
public void doSomething() {
log.info("This is a message from Lombok @Slf4j");
}
}
3.7. @Cleanup
Add @Cleanup to your resources to make sure that they will be cleaned up properly in a finally block.
With Lombok :
public class CleanupHelloWorld {
public void doSomething() throws IOException {
@Cleanup OutputStream out = new FileOutputStream("file");
out.write(1);
out.write(2);
}
}
Without Lombok :
public class CleanupHelloWorld {
public void doSomething() throws IOException {
FileOutputStream out = new FileOutputStream("file");
try {
out.write(1);
out.write(2);
} finally {
if (out != null) {
out.close();
}
}
}
}
You can visit Project Lombok website for more annotations.
Find the source code of this example on GitHub.
4. Conclusion
Project Lombok is a powerful tool that saves time and prevents developers from dealing with boilerplate code.
If for some reason you felt not comfortable with the Lombok ( probably not 🙂 ), you can Delombok your source code to a version without Lombok annotations.
Solution Architect with 10+ years of experience across full-stack development, DevOps, and enterprise software design. Expert in building scalable architectures, CI/CD pipelines, and internal developer platforms using tools like GitHub Actions, Terraform, Kubernetes (AKS), Azure, and Prometheus. Strong hands-on background in Java, Spring, Node.js, and event-driven systems (Kafka, Mulesoft). Passionate about developer experience, software quality, and platform engineering
Hi Mouad,
Thank you for this article. Very nice job
I didn’t understand how the generated artifact is a Target.java file, isn’t the byte-code what you wanted to say ?
I other words, when using @Setter @Getter in the top of an attribute, can I do a calls like foo.setAttribute(…) without any compilations errors ?
Thank you in advance Mr Drake 😉
Good remark Saad, my mistake :/
Actually i wanted to do Target.class not Target.java
However thanks to some plugins added to the IDE we can do foo.setAttribute(…) without compilation.
Thank you 😀
Thank you for the explanation Mouad.
Welcome 🙂
Hi Mouad,
Great article about using Lombok. Have you tried using it in a Hybris project? How is your experience.
Hi Raj, Actually integrating Lombok with Hybris should not be hard, however I don’t think we can do much with Lombok in Hybris, because the majority of classes/structures in Hybris are generated.
Hi Mouad,
I tried this but it won’t work for me. I added lombok as an external-dependency in my custom component but the build failed all time and I couldn’t figure it out why. I also have a stackoverflow question about this with more details. If you are interested and maybe have some idea what am I doing wrong then feel free to leave some comment.
Link: https://stackoverflow.com/questions/62305034/lombok-doesnt-generate-getters-in-hybris-custom-component
Thanks!