martes, 14 de mayo de 2019

Lombok: Como reducir código tan necesario como tedioso

Hoy vamos a ver una librería pequeña pero super util, que nos va a evitar escribir código tedioso como son los getters y setters. Lombok nos permite hacer esto y más a través de anotaciones.

Antes de empezar a ver ejemplos, lo primero que tenemos que hacer es habilitar que nuestro IDE comprenda las anotaciones de Lombok y que en tiempo de compilación puedan ser usadas. Si usamos eclipse, debemos bajar el jar de la librería, por ejemplo de maven central, y ejecutar dicho jar con el comando java -jar. Esto nos abrirá un menú de instalación que nos permitirá instarlo en nuestro IDE.

Lo siguiente será añadir la librería como dependencia de nuestro proyecto. Una vez configurado podemos ver ejemplos de anotaciones y su funcionamiento. Una prueba del mismo, será al incluir nuestras anotaciones ver la vista outline, donde se habrán generado los metodos asociados a las anotaciones. 
  • @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor. Nos permiten crear constructuros de clase.
@NoArgsConstructor
@AllArgsConstructor
public class Saludo
  • @EqualsAndHashCode, @ToString. Anotaciones de clase que permiten generar métodos comunes de clase.
@ToString
@EqualsAndHashCode
@Entity
public class Book extends GenericEntity<Integer>{
  • @Getter, @Setter. Nos permiten olvidarnos de los famosos getter/setters.
private @Getter @Setter String saludo;
  • @Data que auna las anteriores anotaciones: @ToString, @EqualsAndHashCode, @Getter, @Setter y @RequiredArgsConstructor
  • @Value. Al reves que @Data crea todos los métodos igual que este, exceptuando los setters, ya que los atributos serán declarados como privados y finales. 
  • @CommonsLog, @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j. Nos permiten generar el atributo log del tipo que deseemos para realizar las trazas de nuestro proyecto.
@Log4j
@RestController
public class SaludoRestController {
    @GetMapping("/saludo")
    public Saludo Saludo(@RequestParam(value = "nombre", defaultValue = "World") final String nombre) {
        log.info("Saludo - init");
        return new Saludo("Hola", nombre);
    }
}
  • @NonNull, lanzará un NullPointerException si el parámetro asociado es nulo.
@GetMapping("/{id}")
public Book findById(@NonNull @PathVariable("id") final Integer id) {
    return repository.findOne(id);
}
  • @Cleanup. Genera un bloque finally y cierra el recurso asociado a la anotación. Aunque si es closeable el recurso tampoco tiene mucho sentido en mi opinión. 
Podeis ver el código del ejemplo aquí.


No hay comentarios:

Publicar un comentario