Introducción
lombok es un complemento a nivel de compilación que puede generar algún código cuando se compila el proyecto. Por ejemplo, durante el desarrollo diario, se debe producir una gran cantidad de archivos JavaBean . Cada JavaBean necesita proporcionar una gran cantidad de métodos get y set . Si hay muchos campos y cambios, es relativamente engorroso modificarse. El lombok correspondiente puede ahorrarnos el problema de crear manualmente getter y los métodos setter a través de anotaciones (@getter,@setter) . Puede generar automáticamente métodos getter y setter cuando compilamos el código fuente.
Es decir, el efecto que puede lograr es: no hay métodos getter y setter en el código fuente, pero hay métodos getter y setter en el archivo bytecode compilado.
Además, durante la etapa de desarrollo del proyecto, las propiedades de una class cambian constantemente. Se puede agregar un campo hoy, y un campo se puede eliminar mañana. Cada cambio requiere modificar el código de plantilla correspondiente. Además, algunas class tienen tantos campos que no pueden terminar a primera vista. Si agrega código de plantilla, es aún más difícil de ver de un vistazo. Además, porque hay demasiados campos, quiero usar builder para crearlo. La creación manual de builder y campos se mezclan con la clase original, que se ve desordenada. @Builder de lombok puede resolver este problema.
Dirección oficial del sitio web: https://projectlombok.org/
LOMBOK Última versión Número: http://jcenter.bintray.com/org/projectlombok/lombok/
Documento oficial: https://projectlombok.org/features/all
Introducción a la anotación de Lombok: https://www.vevb.com/article/151363.htm
Instale el complemento Lombok
Agregar soporte de anotación
Agregar dependencias
BuildScript {Ext {SpringBootversion = '2.0.2.Release'} repositorios {mavencentral ()} dependencias {classpath ("org.springframework.boot: spring-boot-gradle-plugin: $ {springbootversionion}")}} Aplicar el plugin: 'java'apply:' 'eclipse: plement: plementin:' eClipSe: eClipSe: 'org.springframework.boot'Apply Plugin:' io.spring.dependency-ganagement 'group =' com.yanjun'version = '0.0.1-snapshot'SourCecompatibility = 1.8Repositories {mavencentral ()} dependencias {compil (' compil ('org.springfring.Boot: spring-boot: springter', springter ', springter'. 'org.springframework.boot: spring-boot-starter-web',) // Agregar compilación de dependencia de Lombok 'org.projectlombok: lombok: 1.18.0'}Anotaciones comunes
@Nonnull Consulta Procesamiento vacío
paquete com.yanjun.mybatis.bean; import lombok.data; import lombok.noargsconstructor; import lombok.nonnull;@data@noargSconstructorPublic Class User {public Integer Age; @Nonnull Nombre de cadena pública;}Equivalente a
paquete com.yanjun.mybatis.bean; import lombok.nonnull; público de clase pública {public Integer Age; @Nonnull Nombre de cadena pública; public Integer getAge () {return this.age; } @Nonnull public string getName () {return this.name; } public void setAge (edad entera) {this.age = edad; } public void setName (@NonNull String Name) {if (name == NULL) {tire nueva nullPointerException ("El nombre está marcado @nonnull pero es nulo"); } else {this.name = name; }}}prueba
Usuario user = new User (); user.setName (nulo);
Efecto
Excepción en el hilo "principal" java.lang.nullpointerexception: el nombre está marcado @nonnull pero es nulo
en com.yanjun.mybatis.bean.user.setname (user.java:7)
en com.yanjun.mybatis.lombokapplication.main (lombokapplication.java:15)
@Data proporciona métodos de Get and Set
paquete com.yanjun.mybatis.bean; import lombok.data; @data // Generar automáticamente los métodos GET y establecer Métodos Public Class User {Integer ID; Nombre de cadena; Edad entera; public static void main (string [] args) {// Test Method user = new User (); user.setName ("zhaoyanjun"); user.setage (20); user.setID (1); }}@Impresión de registro SLF4J
paquete com.yanjun.mybatis.bean; import lombok.data; import lombok.extern.slf4j.slf4j; @data // Generar automáticamente los métodos Get and Set @slf4j // Iniciar sesión Impresión del usuario de la clase pública {ID de entero; Nombre de cadena; Edad entera; public static void main (string [] args) {user user = new user (); user.setName ("zhaoyanjun"); user.setage (20); user.setID (1); log.info ("Login" + user.ToString ()); }}@AllargSconstructor Completo Parameter Constructor
paquete com.yanjun.mybatis.bean; import lombok.alLargSconstructor; import lombok.data; import lombok.extern.slf4j.slf4j; @data // Generar automáticamente los métodos GET y establecer Métodos @AlLargSconstructor / /Generar automáticamente el constructor de parámetros completos @slf4j // Login imprimiendo el usuario de clase pública {Intergenter @AllargSconstructor; Nombre de cadena; Edad entera; public static void main (string [] args) {user user = new user (1, "zhaoyanjun", 20); log.info ("Login" + user.ToString ()); }}@ToString Generar automáticamente el método de toString
paquete com.yanjun.mybatis.bean; import lombok.alLargSconstructor; import lombok.data; import lombok.ToString; import lombok.extern.slf4j.slf4j; @data // Generar automáticamente y establecer métodos @AllArgSconstructor // Generar automáticamente el parámetro completo @slfj // {"id", "edad"}) // toString () El método solo imprime id, nombra el usuario de la clase pública de campo {ID de Integer; Nombre de cadena; Edad entera; public static void main (string [] args) {user user = new user (1, "zhaoyanjun", 20); log.info ("Login" + user.ToString ()); }}método toString () excluye los campos
// Excluir campo @tostring (excluir = {"nombre"}) // En el método toString (), el campo de nombre no participa en la impresión@Value se usa para anotar las clases finales
La anotación @Value es similar a @Data , la diferencia es que definirá todas las variables de los miembros como modificación private final de forma predeterminada y no generará set .
paquete com.yanjun.mybatis.bean; import lombok.value; @ValuePublic Class User {Integer id = 1; Name de cadena = "zhaoyanjun"; Edad entera = 3;}Código compilado
Usuario de clase final pública {ID de entero final privado ID = 1; Nombre de cadena final privada = "Zhaoyanjun"; edad de entero final privado = 3; Public User () {} public Integer getId () {return this.id; } public String getName () {this.getClass (); regresar "Zhaoyanjun"; } public Integer GetAge () {return this.age; } // omitir algún código ......}@Builder: Agregue un patrón de constructor a la clase anotada
import lombok.builder; @BuilderPublic Class User {Public Integer ID; nombre de cadena pública; edad de entero público;}Equivalente al siguiente código
paquete com.yanjun.mybatis.bean; usuario de clase pública {ID de Integer Public; nombre de cadena pública; edad de entero público; Usuario (ID de entero, nombre de cadena, edad entero) {this.id = id; this.name = name; this.age = edad; } public static user.userBuilder Builder () {return New User.userBuilder (); } Public Static Class UserBuilder {ID de entero privado; nombre de cadena privada; edad de entero privado; UserBuilder () {} public user.userBuilder ID (ID de Integer) {this.id = id; devolver esto; } public user.userBuilder name (nombre de cadena) {this.name = name; devolver esto; } public user.userBuilder Age (edad entero) {this.age = edad; devolver esto; } Public User Build () {return New User (this.id, this.name, this.age); } public String toString () {return "user.userBuilder (id =" + this.id + ", name =" + this.name + ", age =" + this.age + ")"; }}}usar
UserBuilder userBuilder = user.builder (); user user = userBuilder .age (10) .id (1) .name ("yanjun") .build (); system.out.println (":" + userBuilder.ToString ());@SynChronized: agregue un bloqueo de sincronización
paquete com.yanjun.mybatis.bean; import lombok.synchronized; User de clase pública {Public Integer Age; nombre de cadena pública; // Método ordinario, equivalente al bloqueo de objeto @SynChronized int run1 () {return 1; } // Método estático, equivalente al bloqueo de clase @SynChronized static int run2 () {return 2; }}El efecto del código es equivalente a
Usuario de clase pública {objeto final privado $ bloqueo = nuevo objeto [0]; objeto final estático privado $ bloqueo = nuevo objeto [0]; edad de entero público; nombre de cadena pública; Public User () {} int run1 () {Object var1 = this. $ bloqueo; sincronizado (this. $ Lock) {return 1; }} static int run2 () {objeto var0 = $ bloqueo; Sincronizado ($ Lock) {return 2; }}}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.