Introducción a Lombok

Para los que no los conozcáis, la isla de Lombok, es una isla situada entre Malasia, Australia e Indonesia. Muy cerquita a la isla de Java, y aunque algo menor en cuanto extensión podemos decir que ambas islas son vecinas. Ambas islas pertenecen a Indonesia.

Para muchos residentes de la isla de Java, tener una isla como Lombok tan cerca les facilita mucho a la hora de elegir sus destinos para sus meses de agosto.

Y como esto no es una clase de geografía, comenzamos.

En el mundo de la programación Lombok tiene una función muy similar, también ayudar en ciertas cosas a nuestro lenguaje de programación backend Java. En este artículo, vamos a hablar sobre una de las herramientas que intenta hacernos la vida más fácil en Java, permítanme presentarles a Lombok.

Lombok, es una herramienta formada por un conjunto de anotaciones que nos permiten reducir código repetitivo (como por ejemplo los Getters y los Setters) más abajo veremos una lista de sus beneficios.

Instalando Lombok

Para poder utilizar Lombok, necesitamos añadir a las dependencias de nuestro fichero pom.xml la siguiente.

Para ello, empezamos creando un proyecto:

Para añadir las dependencias tenemos dos opciones:

  • Marcarlas desde el asistente de creación de proyectos:
  • O añadir las dependencias manualmente en el fichero pom.xml:

Si ahora nos metemos en el proyecto, concretamente en el apartado de dependencias, podemos ver todas las dependencias que maven nos ha descargado y añadido al proyecto para poder trabajar con ellas. Concretamente, cada botecito es un archivo JAR (similar a una .RAR o .ZIP) una dependencia.

Podemos ver que tras añadir la referencia a la dependencia de Lombok, maven nos a añadido la dependencia dentro para poder utilizarla dentro del proyecto.

Y además el paso anterior, necesitamos instalar el pluggin de Lombok para nuestro IDE, en nuestro caso Spring Tool Suite 4 (STS4). Para ello, ejecutamos el CMD como administrador y:

En mi caso, tras realizar la configuación el STS4 no me abría. Por lo visto, no me había realizado la configuración de Lombok correctamente y he tenido que ir a el archivo de configuración SpringToolSuite4.ini:

Y modificar la última línea:

Por:

Haciendo el rebuild

Y abrimos el terminal pero con la ruta del proyecto, de esta manera ya estamos en el directorio para hacer el rebuild del proyecto.

Una vez instalado Lombok correctamente, tenemos que reiniciar nuestro IDE (el STS 4) y hacer un rebuild del proyecto.

Y ya tenemos el proyecto listo para empezar a trabajar.

Beneficios de Lombok

Algunas anotaciones mediante a las que podemos comprobar algunos de sus beneficios (aunque no todos) son:

  • Getters y Setters:
    • @Getter: nos crea todos los Getters de los atributos del objeto. LINK
    • @Getter(lazy=true): nos genera un getter que calculará un valor una vez, una única vez. Concretamente la primera vez que se llama a este getter, y lo almacenará en caché a partir de entonces. Esto es ideal para según qué casos en concretos en los que necesitamos un valor que por ejemplo consume muchos recursos de la CPU y no tendremos que llamarlo constantemente en cada petición. Para usar esta función, creamos un getter con @Getter(lazy=true) y finalmente le añadimos private final al atributo. LINK
    • @Setters: nos crea todos los Setters de los atributos del objeto. LINK
  • Constructores:
    • @NoArgsConstructor: crea un constructor sin argumentos. LINK
      @AllArgsConstructor: crea un constructor con todos los argumentos. LINK
  • Mensajes de Log:
    • @CommonsLog: org.apache.commons.logging.Log LINK
    • @JBossLog: org.jboss.logging.Logger LINK
    • @Log: java.util.logging.Logger LINK
    • @Log4j: org.apache.log4j.Logger LINK
    • @Log4j2: org.apache.logging.log4j.Logger LINK
    • @XSlf4j: org.slf4j.ext.XLogger LINK
  • Encadenamiento de métodos
    • @Builder: permite realizar un encadenamiento para invocar varios métodos dentro de un mismo objeto en una única declaración. LINK
  • Propiedades para métodos u constructores
    • @NonNull: permite asignar un parámetro de un método o constructor para que lombok genere una declaración de verificación nula por usted. o da como resultado la inserción de solo la declaración de verificación nula dentro de su propio método o constructor. LINK
    • @ToString: permite que lombok genere un método toString(). LINK
    • @EqualsAndHashCode: generá los métodos equals() y hashCode(). LINK
  • Limpieza de flujos Streams:
    • @Cleanup: permite asegurarnos que “limpiamos automáticamente” el uso de recurso, con “limpiar” nos referimos a que cerramos esos recursos después de usarlos. Algunos de los más populares son BufferedReader, FileReader, OutputStream e InputStream. LINK
  • Combinados a modo de “ensalada” de anotaciones:
    • @Data: Es equivalente a utilizar el conjunto de anotaciones: @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode. LINK
    • @Value: Es una variante de @Data que tiene todos los campos como final y private por lo que protege los atributos (se vuelven solo de lectura) es equivalente al conjunto de anotaciones: @Getter @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE) @AllArgsConstructor @ToString @EqualsAndHashCode. LINK

Ejemplo práctico de uso de Lombok

En el artículo de CRUD REST con Spring Boot y JPA, teníamos el POJO Customers. Si analizamos el código “vainilla” vemos que su extensión son 89 líneas.

En cambio, si escribimos los Getters y Setter mediante a la anotación de Lombok, podemos comprobar como el código se reduce a 38 líneas. Nos hemos ahorrado por tanto más de 50 líneas de código repetitivo, tenemos un código que dice más con menos además de ahorrarnos el proceso de crear los Getters y Setters desde el asistente.

Conclusión

A partir de ahora, cuando tengamos Java y repetitivo en una misma frase, deberemos plantearnos si utilizar Lombok tiene sentido. Normalmente la respuesta será que sí. Un saludo javer@s!

2 comentarios

  1. Excellent, what a weblog it is! This weblog provides useful data to us, keep it up.

  2. A fascinating discussion is definitely worth comment.
    I do think that you need to publish more about this topic, it may not be a taboo subject but generally
    people do not speak about such subjects. To the next!
    Many thanks!!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

La Ley 34/2002 nos obliga a avisarte de que usamos cookies propias y de terceros con objetivos estadísticos y de sesión y para mostrarte la 'publi' que nos da de comer. Tranquilo, este mensaje solo sale una vez. Más información

Java desde 0 comunica a los usuarios, a través de este aviso, que puede utilizar cookies cuando el usuario navega por las diferentes pantallas y páginas del sitio. Durante el uso de nuestra página Web usted acepta y autoriza expresamente el uso de cookies, de acuerdo con nuestra Política de Privacidad. Este sitio web utiliza las siguientes cookies propias: - Cookies de sesión, para garantizar que los usuarios que escriban comentarios en el blog sean humanos y no aplicaciones automatizadas. De esta forma se combate el spam. Este sitio web utiliza las siguientes cookies de terceros: - Google AdManager y AdSense: Utiliza cookies para mejorar la publicidad. Entre otros fines, suelen utilizarse para segmentarla según el contenido que sea relevante para los usuarios o su ubicación, mejorar los informes de rendimiento de las campañas y evitar mostrar anuncios que los usuarios ya hayan visto. Las cookies no contienen información personal identificable. Consulta cómo utiliza Google la información de sitios web o aplicaciones. y cómo bloquear determinados anuncios. - Google Analytics: Almacena cookies para poder elaborar estadísticas sobre el tráfico y volumen de visitas de esta web. Al utilizar este sitio web está consintiendo el tratamiento de información acerca de usted por Google. Por tanto, el ejercicio de cualquier derecho en este sentido deberá hacerlo comunicando directamente con Google. - Redes sociales: Cada red social utiliza sus propias cookies para que usted pueda pinchar en botones del tipo Me gusta o Compartir.

Cerrar