Introdução
lombok é um plug-in em nível de compilação que pode gerar algum código quando o projeto é compilado. Por exemplo, durante o desenvolvimento diário, um grande número de arquivos JavaBean precisa ser produzido. Cada JavaBean precisa fornecer um grande número de métodos get e set . Se houver muitos campos e alterações, é relativamente complicado modificar. O lombok correspondente pode nos salvar o problema de criar manualmente os métodos de getter e setter por meio de anotações (@getter,@setter) . Ele pode gerar automaticamente métodos getter e setter quando compilamos o código -fonte.
Ou seja, o efeito que ele pode alcançar é: não há métodos getter e setter no código -fonte, mas existem métodos getter e setter no arquivo bytecode compilado.
Além disso, durante a fase de desenvolvimento do projeto, as propriedades de uma class estão mudando constantemente. Um campo pode ser adicionado hoje e um campo pode ser excluído amanhã. Cada alteração requer modificar o código do modelo correspondente. Além disso, algumas class têm tantos campos que não podem terminar à primeira vista. Se você adicionar código de modelo, é ainda mais difícil de ver rapidamente. Além disso, porque existem muitos campos, quero usar builder para criá -lo. Criar manualmente builder e campos são misturados com a classe original, que parece confusa. @Builder da lombok pode resolver esse problema.
Endereço oficial do site: https://projectlombok.org/
Número da versão mais recente do Lombok: http://jcenter.bintray.com/org/projectlombok/lombok/
Documento oficial: https://projectlombok.org/features/all
Anotação Lombok Introdução: https://www.vevb.com/article/151363.htm
Instale o plugin LOMOM
Adicione suporte à anotação
Adicione dependências
BuildScript {Ext {SpringBootVersion = '2.0.2.Release'} repositórios {mavencentral ()} dependências {ClassPath ("org.springframework.boot: spring-boot gradle-plugin: $ {springbootversion})}} aplicar plugin: 'JavAn:' java 'plup' slingBootversion})}} Plugin: ' 'org.springframework.boot'apply plugin:' io.spring.dependency-gestão 'group =' com.yanjun'version = '0.0.1-snapshot'sourceCompatibility = 1.8Repositories {Mavencentral ()} dependências {complacile (combile (1.8Reposition {Mavencentral () spring-springring (spramMerwring (MAVENTROTRAL () springFoTerning (MAVENTROTROTROTROTENSOTERFOTERFOTERS (SDOUR.O.BOTERFOMOTERFOTERFOTERN (MAVENTRAL (). 'org.springframework.boot: spring-boot-starter-web',) // Adicione Lombok Dependência Compile 'Org.projectlombok: LOMOMPOK: 1.18.0'}Anotações comuns
@Nonnull consulta de processamento vazio
pacote com.yanjun.mybatis.bean; importar lombok.data; importar lombok.noargsconstructor; importar lombok.nonnull;@data@noargsconstructorpublic classe usuário {público inteiro público; @Nonnull Public String Name;}Equivalente a
pacote com.yanjun.mybatis.bean; importar lombok.nonnull; public class Usuário {public integer Age; @Nonnull Public String Name; public integer getage () {return this.age; } @NonNull public String getName () {return this.name; } public void setage (idade inteira) {this.age = Age; } public void SetName (@Nonnull String Name) {if (name == null) {tiro novo nullPointerException ("o nome está marcado @Nonnull, mas é nulo"); } else {this.name = name; }}}teste
Usuário do usuário = novo usuário (); user.setName (null);
Efeito
Exceção no tópico "main" java.lang.nullpointerException: o nome está marcado @Nonnull, mas é nulo
em com.yanjun.mybatis.bean.user.setName (user.java:7)
em com.yanjun.mybatis.lombokapplication.main (lombokapplication.java:15)
@Data fornece métodos de obter e definir
pacote com.yanjun.mybatis.bean; importar lombok.data; @data // gerar automaticamente métodos de get e definir o usuário da classe pública {ID inteiro; Nome da string; Idade inteira; public static void main (string [] args) {// Método de teste usuário usuário = new User (); user.setName ("zhaoyanjun"); user.setage (20); user.setId (1); }}@Slf4j log de log
pacote com.yanjun.mybatis.bean; importar lombok.data; importar lombok.extern.slf4j.slf4j; @data // gerar automaticamente os métodos get e definir @slf4j // Login Printing public class User {integer id; Nome da string; Idade inteira; 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 Construtor de parâmetro completo
pacote com.yanjun.mybatis.bean; importar lombok.allargSconstructor; importar lombok.data; importar lombok.extern.slf4j.slf4j; @data // genering automaticamente construtor e definir métodos @allargsconstructor // gerar automaticamente parâmetros full construtor @sllFergor @AllarSconstructor // gerar automaticamente parâmetros Nome da string; Idade inteira; public static void main (string [] args) {user user = novo usuário (1, "zhaoyanjun", 20); log.info ("login" + user.toString ()); }}@ToString gerar automaticamente o método de toque
pacote com.yanjun.mybatis.bean; importar lombok.allargSconstructor; importar lombok.data; importar lombok.toString; importar lombok.extern.slf4j.slf4j; @data // gerar automaticamente os métodos de get e defina @allarMcStrutor // Automatora // @ToString (de = {"id", "Age"}) // ToString () Método apenas imprime o ID, Nome Field public class Usuário {ID de Inteiro; Nome da string; Idade inteira; public static void main (string [] args) {user user = novo usuário (1, "zhaoyanjun", 20); log.info ("login" + user.toString ()); }}O método tostring () exclui campos
// exclua o campo @toString (exclude = {"name"}) // no método tostring (), o campo de nome não participa da impressão@Value é usado para anotar as classes finais
A anotação @Value é semelhante ao @Data , a diferença é que ele definirá todas as variáveis de membro como modificação private final por padrão e não gera set .
pacote com.yanjun.mybatis.bean; importar lombok.value; @Valuepublic Class Usuário {IDG ID = 1; String name = "zhaoyanjun"; Idade inteira = 3;}Código compilado
Public Final Class User {private final ID ID = 1; Nome da string final privada = "Zhaoyanjun"; Idade do número inteiro final privado = 3; public user () {} public integer getId () {return this.id; } public string getName () {this.getClass (); retornar "Zhaoyanjun"; } public integer getage () {return this.age; } // omita algum código ......}@Builder: Adicione um padrão de construtor à classe anotada
importar lombok.builder; @builderpublic classe usuário {public integer id; Nome de String Public; idade inteira pública;}Equivalente ao seguinte código
pacote com.yanjun.mybatis.bean; usuário public class Usuário {public integer id; Nome de String Public; idade inteira pública; Usuário (ID inteiro, nome da string, idade inteira) {this.id = id; this.name = nome; this.age = idade; } public static user.UserBuilder Builder () {return novo user.UserBuilder (); } classe public static userbuilder {private integer id; nome de string privado; idade inteira privada; UserBuilder () {} public user.UserBuilder ID (ID inteiro) {this.id = id; devolver isso; } public user.userbuilder nome (nome da string) {this.name = name; devolver isso; } public user.UserBuilder Age (idade inteira) {this.age = Age; devolver isso; } public user ed build () {return novo usuário (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 (); usuário user = userBuilder .age (10) .id (1) .Name ("yanjun") .build (); system.out.println (":" + userBuilder.tostring ());@Synchronized: Adicione um bloqueio de sincronização
pacote com.yanjun.mybatis.bean; importar lombok.synchronized; public class Usuário {public integer Age; Nome de String Public; // método comum, equivalente ao objeto Lock @synchronized int run1 () {return 1; } // Método estático, equivalente à classe Lock @Synchronized static int run2 () {return 2; }}O efeito do código é equivalente a
Public Class User {Private final Object $ Lock = novo objeto [0]; Objeto final estático privado $ bloqueio = novo objeto [0]; idade inteira pública; Nome de String Public; public user () {} int run1 () {objeto var1 = this. $ Lock; sincronizado (this. $ bloqueio) {return 1; }} static int run2 () {objeto var0 = $ Lock; sincronizado ($ bloqueio) {return 2; }}}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.