什么是Lombok?

  官方介绍——Lombok项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而为您的Java增光添彩。永远不要再写另一个getter或equals方法,带有一个注释的您的类有一个功能全面的生成器,自动化您的日志记录变量等等。理解一下,使用Lombok,通过注解类,让你不再需要编写getter、equals等方法,减少样板代码的编写。

lombok的官方地址:https://projectlombok.org/

lombok的Github地址:https://github.com/rzwitserloot/lombok

  Lombok的使用:

、引入Lombok jar包

 Lombok的scope=provided,说明它只在编译阶段生效,不需要打入包中。事实正是如此,Lombok在编译期将带Lombok注解的Java文件正确编译为完整的Class文件。

、开发工具中下载Lombok插件

  ide下载插件后在开发阶段ide可以识别Lombok注释,从而不会报错

安装方法:点击File-- Settings设置界面,安装Lombok插件:

 点击File-- Settings设置界面,开启 AnnocationProcessors:

   开启该项是为了让Lombok注解在编译阶段起到作用。

、Lombok的实现原理

  自从Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候得到调用。Lombok就是一个实现了"JSR 269 API"的程序。

具体流程:

  1. javac对源代码进行分析,生成一棵抽象语法树(AST)

  2. javac编译过程中调用实现了JSR 269的Lombok程序

  3. 此时Lombok就对第一步骤得到的AST进行处理,找到Lombok注解所在类对应的语法树 (AST),然后修改该语法树(AST),增加Lombok注解定义的相应树节点

  4. javac使用修改后的抽象语法树(AST)生成字节码文件,生成对应类中的getter或者setter方法

、Lombok注解的使用

   Lombok主要常用的注解有:@Data,@getter,@setter,@NoArgsConstructor,@AllArgsConstructor,@ToString,@EqualsAndHashCode,@Slf4j,@Log4j等。

  @Data注解:在JavaBean或类JavaBean中使用,这个注解包含范围最广,它包含getter、setter、NoArgsConstructor注解,即当使用当前注解时,会自动生成包含的所有方法;

  @getter注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的getter方法;

  @setter注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的setter方法;

  @NoArgsConstructor注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的无参构造方法;

  @AllArgsConstructor注解:在JavaBean或类JavaBean中使用,使用此注解会生成对应的有参构造方法;

  @ToString注解:在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的toStirng方法;

  @EqualsAndHashCode:作用于类,覆盖默认的equals和hashCode

  @NonNull:主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常。

  @Builder:作用于类上,将类转变为建造者模式

  @Cleanup:自动关闭资源,针对实现了java.io.Closeable接口的对象有效,如:典型的IO流对象

  @EqualsAndHashCode注解:在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的equals方法和hashCode方法;

  @Slf4j:在需要打印日志的类中使用,当项目中使用了slf4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;

  @Log4j:在需要打印日志的类中使用,当项目中使用了log4j打印日志框架时使用该注解,会简化日志的打印流程,只需调用info方法即可;

  在使用以上注解需要处理参数时,处理方法如下(以@ToString注解为例,其他注解同@ToString注解):

  @ToString(exclude="column")

  意义:排除column列所对应的元素,即在生成toString方法时不包含column参数;

  @ToString(exclude={"column1","column2"})

  意义:排除多个column列所对应的元素,其中间用英文状态下的逗号进行分割,即在生成toString方法时不包含多个column参数;

  @ToString(of="column")

  意义:只生成包含column列所对应的元素的参数的toString方法,即在生成toString方法时只包含column参数;;

  @ToString(of={"column1","column2"})

  意义:只生成包含多个column列所对应的元素的参数的toString方法,其中间用英文状态下的逗号进行分割,即在生成toString方法时只包含多个column参数;


参考链接:https://blog.csdn.net/qq_36314960/java/article/details/79565899

原文地址:https://www.cnblogs.com/qingpw/p/12877503.html