介绍lombok是一个编译级的插件,可以在项目编译的时候生成一些代码。lombok提供了一些可用于类、字段和方法的注释。这些注解可以减少一些代码的编写。在IDEA开发工具中安装,打开file->Settings->Plugins搜索lombok插件安装,如图界面:在项目中添加lombok的依赖,然后就可以使用lombok注解了,依赖如下:org.projectlomboklombok1.18.24注解@Getter/@Setter自动生成getter和setter方法,作用于类或字段。@Target({ElementType.FIELD,ElementType.TYPE})@AllArgsConstructor自动生成全参数构造函数。如果staticName不为空,则生成一个返回实例的静态方法,并将构造函数设置为private。该注解作用于类。@AllArgsConstructor(staticName="create")公共类示例{privateintfoo;privatefinalStringbar;}generatepublicclassExample{privateintfoo;私有最终字符串栏;私有示例(intfoo,Stringbar){this.foo=foo;这个.bar=bar;}publicstaticExamplecreate(intfoo,Stringbar){returnnewExample(foo,bar);}}@Builder自动生成构建器模式bean。此注释适用于类、方法和构造函数。@BuilderpublicclassPerson{私有字符串名称;privateIntegerage;}生成publicclassPerson{privateStringname;私人整数年龄;Person(Stringname,Integerage){this.name=name;这个。年龄=年龄;}publicstaticPerson.PersonBuilderbuilder(){returnnewPerson.PersonBuilder();}publicstaticclassPersonBuilder{私有字符串名称;私人整数年龄;PersonBuilder(){}publicPerson.PersonBuildername(Stringname){this.name=name;归还这个;}publicPerson.PersonBuilderage(Integerage){this.age=age;归还这个;}publicPersonbuild(){returnnewPerson(this.name,this.age);}publicStringtoString(){return"Person.PersonBuilder(name="+this.name+",age="+this.age+")";}}}@数据为所有字段生成getter、toString()、hashCode()、equals(),为所有非最终字段生成setter,以及构造函数。该注解作用于类。@Datapublic类示例{privateintfoo;privatefinalStringbar;}生成publicclassExample{privateintfoo;私有最终字符串栏;公共示例(字符串栏){this.bar=bar;}publicintgetFoo(){返回this.foo;}publicStringgetBar(){返回this.bar;}publicvoidsetFoo(intfoo){this.foo=foo;}publicbooleanequals(Objecto){if(o==this){returntrue;}elseif(!(oinstanceofExample)){returnfalse;}else{示例other=(Example)o;如果(!other.canEqual(this)){返回false;}elseif(this.getFoo()!=other.getFoo()){返回假;}else{对象this$bar=this.getBar();对象other$bar=other.getBar();如果(this$bar==null){如果(other$bar!=null){returnfalse;}}elseif(!this$bar.equals(other$bar)){返回假;}返回真;}}}protectedbooleancanEqual(Objectother){returnotherinstanceofExample;}publicinthashCode(){intPRIME=true;整数结果=1;int结果=结果*59+this.getFoo();对象$bar=this.getBar();结果=结果*59+($bar==null?43:$bar.hashCode());返回结果;}publicStringtoString(){return"Example(foo="+this.getFoo()+",bar="+this.getBar()+")";}}@Slf4j自动生成slf4j的最终静态日志变量,该注解作用于类上的@Accessorsfluent属性:不写则默认为false。当值为true时,相应字段的getter方法前面没有get,setter方法中也不会有set。chain属性:如果不写,默认为false。当值为true时,调用相应字段的setter方法后,返回当前对象原理。编译时操作如:@Data注解,@Retention(RetentionPolicy.SOURCE),意思是,注解在源代码期间被保留,编译完成后注解将被删除。在删除之前,编译器会在其中添加一些方法和其他操作,即代码在编译期间被增强。JSR-269提案JDK6提出并通过了JSR-269提案。该提案通过了一组称为“插件注释处理器”的标准API,可以在编译时提前处理代码中的特定注释,从而影响编译器的工作过程。Lombok本质上是一个实现“JSR269API”的程序。在使用javac的过程中,其功能的具体过程如下:javac对源代码进行词法和语法分析,生成抽象语法树AST(Abstractsyntaxtree)。运行过程中调用注解处理器,实现“JSR269API”的Lombok程序Lombok对第一步生成的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改语法树(AST),添加相应的getter、setter等方法定义类对插件lombok进行总结,通过编译编译器时操作AST(抽象语法树)来改变字节码,在源码的基础上进行代码增强,改变了源码的编写方式,减少了代码量在一定程度上减少了编写源代码的难度,在一定程度上提高了开发效率。使用lombok注解隐藏了一些代码细节,可能会对代码调试造成一定的影响。当项目中大量使用lombok注解时,后期的代码维护也可能或多或少受到影响。