En java como en cualquier otro lenguaje de programación, cuando desarrollamos nuestras apps, nos encontramos con código que se repite en las diferentes clases que creamos, este código parece ser obligatorio, pero la verdad es que no necesariamente. En java existe la Liberia lombok, que nos permite reducir este código repetido o con patron similar en todos los casos, por ejemplo, los métodos getters y setters de un POJO, Dto o una Entity, en este articulo vamos a ver el uso del mismo.
Herramientas y tecnologías utilizadas
- Spring Boot – 2.2.4.RELEASE
- JDK – 1.8 or later
- Spring Framework – 5.2.3.RELEASE
- Gradle – 6.1. 1
- IDE – IntelliJ 2019.3.3
Instalación de Lombok
Antes que nada, debemos agregar la dependencia al proyecto, ya sea el caso de Maven o gradle el respectivo código en el archivo de configuración, en este caso el de gradle.
compileOnly 'org.projectlombok:lombok'
Así mismo dependiendo del IDE de desarrollo que usemos es necesario también instalar un plugin para trabajar con lombok ya que muy probablemente el IDE no reconozca las funciones que lombok provee y de error en la llamada de algunos métodos que la librería implementara, en este caso en IntelliJ se debe agregar el plugin respectivo:
Algunas características de Lombok
- @Getter
- @Setter
- @Builder
- @NoArgsConstructor
- @AllArgsConstructor
- @Log
Esta librería esta tan bien hecha que su uso es totalmente intuitivo, ya que cada uno de estos métodos se auto explica, basta realizar un par de experimentos con ellas para darse cuenta como funcionan, pero de todas formas explicaremos los principales usos de estos métodos.
@Getter @Setter
Cuando creamos entities, pojos, etc siempre creamos el código realizando el set y el get de la propiedad, por ejemplo:
public class Student {
private long id;
private String lastName;
private String firstName;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
Pero estos métodos pueden ser implementados por lombok y el código quedaría más simplificado así:
@Getter
@Setter
public class Student {
private long id;
private String lastName;
private String firstName;
}
@ NoArgsConstructor @AllArgsConstructor
Si queremos implementar un constructor sin parámetros o uno con todos los parámetros del entity o pojo, tendríamos que hacer un código como este:
public class Student {
private long id;
private String lastName;
private String firstName;
public Student() {
}
public Student(long id, String lastName, String firstName) {
this.id = id;
this.lastName = lastName;
this.firstName = firstName;
}
}
Pero con lombok el código quedaría:
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private long id;
private String lastName;
private String firstName;
}
@Builder
Para el uso del patrón de diseño Builder en nuestro proyecto tendríamos que definir el POJO de la siguiente manera:
public class Student {
private long id;
private String lastName;
private String firstName;
public Student(long id, String lastName, String firstName) {
this.id = id;
this.lastName = lastName;
this.firstName = firstName;
}
public static class Builder {
private long id;
private String lastName;
private String firstName;
public Builder() {
}
public Builder setId(long id) {
this.id = id;
return this;
}
public Builder setLastName(String lastName) {
this.lastName = lastName;
return this;
}
public Builder setFirstName(String firstName) {
this.firstName = firstName;
return this;
}
public Student build() {
return new Student(id, lastName, firstName);
}
}
}
Pero implementando esto mismo con lombok, quedaría así:
@Builder
public class Student {
private long id;
private String lastName;
private String firstName;
}
Y su utilizacion seria asi:
Student student = Student.builder().id(1).firstName("Edy").lastName("Huiza").build();
@Logs
Si queremos utilizar por ejemplo logs en nuestro proyecto, en el caso particular de Slf4j tendríamos que instanciar el mismo de la siguiente manera:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Student {
private long id;
private String lastName;
private String firstName;
private static Logger log = LoggerFactory.getLogger(Student.class);
public Student() {
log.info("Some log");
}
}
Pero con Lombok es tan simple con agregar la anotación @Slf4j:
@Slf4j
public class Student {
private long id;
private String lastName;
private String firstName;
public Student() {
log.info("Some log");
}
}
Conclusión
Como en todo lo referente a la tecnología, si podemos simplificar nuestro código debemos hacerlo, y lombok es justamente una librería que puede ayudarnos en este cometido.
Es necesario mencionar que los métodos descritos en este articulo no son los únicos, ya que existen aún más funcionalidades en esta librería, pero si los mas usados.
Como siempre te dejamos el link al codigo del proyecto en github.