Visi贸n general
Contenido
Lombok es una biblioteca de c贸digo abierto que se utiliza para reducir el c贸digo repetitivo en las clases de Java. Esto se logra reemplazando muchas de las piezas repetitivas de c贸digo con anotaciones simples y concisas.
Lombok se inyecta a s铆 mismo en el proceso de compilaci贸n (a trav茅s de su proyecto / IDE) y autogenera el c贸digo de bytes para los m茅todos deseados en su .class
archivos.
Entonces, con Lombok, puede deshacerse de todos los m茅todos getter y setter, hashcode y m茅todos iguales y muchos m谩s simplemente agregando anotaciones.
Configuraci贸n de Lombok
Instalaci贸n de Lombok en Eclipse
Descarga el Lombok .jar
archivo de el sitio web oficial. Ejecute el descargado lombok.jar
archivo o ejecute el comando en la terminal:
java -jar lombok.jar
Esto iniciar谩 el instalador:
Si no detect贸 autom谩ticamente la ubicaci贸n de su IDE preferido, puede especificar la ubicaci贸n manualmente y luego finalizar la instalaci贸n haciendo clic en ‘Instalar / Actualizar’.
Puede comprobar si la instalaci贸n est谩 activa o no en el cuadro de di谩logo “Acerca de” de Eclipse al final del texto de copyright:
Instalaci贸n de Lombok en NetBeans
Descarga el Lombok .jar
desde el sitio web oficial y agregarlo a las bibliotecas del proyecto.
Activar el plugin es tan f谩cil como seleccionar Project Properties -> Build - Compiling -> Enable Annotation Processing in Editor
.
Instalaci贸n de Lombok en IntelliJ
IntelliJ Idea hace que sea realmente f谩cil instalar plugins en el IDE:
- Ir
File -> Settings -> Plugins
y seleccioneBrowse Repositories
- Buscar
Lombok Plugin
y haga clic enInstall Plugin
Despu茅s de esto, simplemente reinicie el IDE y estar谩 listo.
Para otros IDE, puede visitar su p谩gina de inicio y consulte la secci贸n Instalar.
Dependencia de Lombok
Necesitamos agregar la siguiente dependencia en nuestro pom.xml:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>{version}</version>
<scope>provided</scope>
</dependency>
Nota: El alcance es provided
ya que Lombok es una dependencia de compilaci贸n pura y no de tiempo de ejecuci贸n. Esto significa que esperamos que la aplicaci贸n nos proporcione la dependencia del tiempo de ejecuci贸n.
Anotaciones de Lombok
@Getter y @Setter
Estas anotaciones se pueden utilizar a nivel de campo o de clase. Si se usa a nivel de clase, generar谩 captadores y definidores para todos los campos de la clase:
@Getter
@Setter
public class User {
private String name;
private String email;
}
Como se ve en la ventana IDE, ambos campos ahora tienen sus respectivos m茅todos getter y setter, aunque en realidad no los definimos nosotros mismos.
Si desea getters / setters solo para ciertos campos, an贸telos en consecuencia:
public class User {
@Getter
@Setter
private String name;
private String email;
}
Si desea cambiar el nivel de acceso de los m茅todos y campos generados, puede hacerlo utilizando el AccessLevel
argumento:
@Setter(AccessLevel.PROTECTED)
private String email;
Hay algunos niveles de acceso que ofrece Lombok en forma de argumentos:
- M脫DULO
- NINGUNA (Representa no generar nada o la falta total de un m茅todo)
- PAQUETE
- PRIVADO
- PROTEGIDO
- P脷BLICO
Anotaciones de constructor
@TodosConstructor
los @AllArgsConstructor
decorator generar谩 un constructor p煤blico con todos los campos declarados en su clase en el mismo orden en que est谩n definidos:
@AllArgsConstructor
public class User {
private String name;
private String email;
}
El constructor generado se ver铆a as铆:
public User(String name, String email) {
this.name = name;
this.email = email;
}
@NoArgsConstructor
@NoArgsConstructor
generar谩 un constructor sin argumentos:
@NoArgsConstructor
public class User {
private String name;
private String email;
}
El constructor generado se ver铆a as铆:
public User() {}
Nota: Si el constructor no se puede generar debido a la presencia de final
campos, aparecer谩 un mensaje de error.
@RequiredArgsConstructor
@RequiredArgsConstructor
generar谩 un constructor con todos los final
campos en la clase:
@RequiredArgsConstructor
public class User {
private final String name;
private String email;
}
El constructor generado se ver铆a as铆:
public User(final String name) {
this.name = name;
}
Nota: @NoArgsConstructor
y @RequiredArgsConstructor
no se pueden usar juntos y arrojar谩 un error de tiempo de compilaci贸n si intenta hacerlo.
@EqualsAndHashCode
@EqualsAndHashCode
se puede usar usado a nivel de clase que generar谩 implementaciones para equals(Object other)
y hashCode()
m茅todos.
De forma predeterminada, utilizar谩 todos los campos no est谩ticos y no transitorios:
@EqualsAndHashCode
public class User {
private String name;
private String email;
private Integer age;
}
Si hay ciertos campos que no desea incluir en el equals
o hashCode
m茅todos, entonces podemos excluir esos campos espec铆ficos usando @EqualsAndHashCode.Exclude
:
@EqualsAndHashCode
public class User {
private String name;
private String email;
@EqualsAndHashCode.Exclude
private Integer age;
}
Alternativamente, podemos especificar los campos que se incluir谩n usando @EqualsAndHashCode.Include
y @EqualsAndHashCode(onlyExplicitlyIncluded = true)
:
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class User {
@EqualsAndHashCode.Include
private String name;
@EqualsAndHashCode.Include
private String email;
private Integer age;
}
@Encadenar
Similar, @ToString
se puede utilizar para generar el toString()
implementaci贸n. De forma predeterminada, se imprimir谩n todos los campos no est谩ticos. Puede especificar si desea incluir u omitir ciertos campos mediante una combinaci贸n de @ToString.Exclude
, @ToString.Include
y @ToString(onlyExplicitlyIncluded = true)
justo como antes:
@ToString(onlyExplicitlyIncluded = true)
public class User {
@ToString.Include
private String name;
@ToString.Include
private String email;
private Integer age;
}
@Datos
Es com煤n tener todas las anotaciones antes mencionadas en su POJO. En lugar de escribir una anotaci贸n para cada uno de ellos, Lombok proporcion贸 una anotaci贸n agregada @Data
.
Esto agrupa las caracter铆sticas de @Getter/@Setter
, @EqualsAndHashCode
, @ToString
y @RequiredArgsConstructor
juntos como si los hubieras apilado todos:
@Data
public class User {
private final String name;
private String email;
}
@Valor
A veces desea que su objeto sea inmutable despu茅s de su creaci贸n. @Value
es una variante inmutable de @Data
y se utiliza exactamente para este prop贸sito.
De forma predeterminada, todos los campos se hacen definitivos y no se crean establecedores:
@Value
public class User {
private String name;
private String email;
}
@Constructor
El patr贸n Builder es un patr贸n de dise帽o de creaci贸n que se utiliza para ayudar a construir objetos paso a paso.
Como ya sabr谩, si bien el patr贸n del constructor le permite crear instancias de objetos de una manera m谩s detallada y limpia que con los constructores, el c贸digo subyacente necesario para implementar el patr贸n es bastante complicado.
@Builder
le permite producir autom谩ticamente el c贸digo requerido para ello:
@Builder
@Data
public class User {
private String name;
private String email;
}
Ahora puedes crear el User
objeto utilizando el patr贸n Builder sin todo el c贸digo necesario para admitirlo:
User user = new User.UserBuilder()
.email("[email聽protected]")
.name("test name")
.build();
System.out.println(user.getEmail());
Inicio sesi贸n
Es com煤n usar registradores en nuestra aplicaci贸n y, por lo general, necesitamos inicializar una variable de registro en la parte superior de la clase y luego usarla en nuestros m茅todos.
Esto se puede lograr @Log
que crea autom谩ticamente este campo:
@Log
public class Test {
public static void main(String[] args) {
log.severe("Log message");
}
}
@Log
crea una variable de registro con un java.util.logging.Logger.getLogger(LogExample.class.getName())
objeto.
Lombok tambi茅n admite otros marcos de registro, que pueden ser utilizados por anotaciones como @Log4j
, @Slf4j
etc.
Se puede ver la lista completa de marcos compatibles aqu铆.
Escribir m茅todos seguros para subprocesos
En Java para aplicaciones multiproceso, usamos el synchronized
palabra clave en secciones cr铆ticas del c贸digo.
Normalmente usamos un synchronized
bloquear con un objeto como candado:
public class SynchronizedJavaExample {
private static final Object lock = new Object();
public static void test() {
synchronized (lock) {
System.out.println("test");
}
}
}
Esto se puede generar autom谩ticamente con el @Synchronized
palabra clave:
public class SynchronizedExample {
@Synchronized
public static void test() {
System.out.println("test");
}
}
Conclusi贸n
En este art铆culo, proporcionamos una introducci贸n al Proyecto Lombok y vimos c贸mo facilita nuestro proceso de desarrollo al reducir el c贸digo est谩ndar con anotaciones simples. Esto mejora dr谩sticamente la legibilidad y la brevedad.
El c贸digo de los ejemplos utilizados en este art铆culo se puede encontrar en Github.