Lombok工具使用介绍和原理分析

1 什么是 Lombok?

下面是 Lombok 官网的简介:
image.png

简而言之就是 Lombok 是一个很方便的插件,本质是个 Java 库,使用它通过相关注解就可以不用再编写冗长的 getter 或者 equals 等方法了。接下来讲下 Lombok 实现的原理,这样就知道为什么要这样使用 Lombok 的注解了。

2 Lombok 实现原理

要讲 Lombok 的实现原理,在此之前就需要来说下注解的两种解析方式:

  • 运行时注解
  • 编译时注解

首先来看下运行时解析,比如 Spring 配置的 AOP 切面这些注解都是在程序运行的时候通过反射来获取的注解值,但是只有在程序运行时才能获取到这些注解值,导致运行时代码效率很低,并且如果想在编译阶段利用这些注解来进行检查,比如对用户的不合理代码作出错误报告,反射的方法就行不通了。

这就引出了编译时解析,Lombok 工具就是运行在编译时解析的。

那如何把注解与 Java 编译器结合使用呢?

Java 也提供的解决方案是注解处理器(Annotation Processing Tool),它最早是在 JDK 1.5 与注解(Annotation) 一起引入的,它是一个命令行工具,能够提供构建时基于源代码对程序结构的读取功能,能够通过运行注解处理器来生成新的中间文件,进而影响编译过程,不过它在 JDK 1.8 中被移除了,取而代之的是 JSR 269 插入式注解处理器(Pluggable Annotation Processing API),它是实现了 JSR 269 的机制,作为注解处理器的替代方案。

我们通过一个流程图来进一步说明注解处理器的工作原理:
image.png

首先写完代码后会调用 javac 编译,在编译后会生成抽象语法树(AST),之后会调用插入式注解处理器处理,上面说了插入式注解处理器会修改语法树,生成一些额外的代码,经过处理器的处理语法树会有变动,有变动之后,会再次到生成抽象语法树的处理环节,将变动后的代码再次生成抽象语法树,接着再通过注解处理器,如果这次语法树没有被修改,那么就会生成响应的字节码,变成 class 文件,以上就是整个注解处理器在整个 javac 编译源代码生成 class 文件中起到的作用。

3 lombok常用注解

在简单了解了 Lombok 实现原理后,让我们看下 Lombok 有哪些常见的注解:Lombok 注解下面是整理的常用的 Lombok 注解思维导图:
image.png

右侧上方的 @Getter、@Setter、@ToString、@EqualsAndHashCode 这几个名字大家都不陌生,无非就是帮我们生成对应的方法,这四个注解的总和也就是刚开始用的注解 @Data,这些注解都归结为常见方法的注解。

右侧下方的 @AllArgsConstructor、@RequiredArgsConstructor、@NoArgsConstructor 分别为全参构造函数、必须参数构造函数、无参构造函数,它们通常为构造方法的注解。

左侧的 @NonNull 会自动生成空值校验;@CleanUp 会自动调用变量的 close 方法释放资源;@Builder 会自动生成构造者模式,方便对属性 set/get 操作; @Synchronized 会自动生成同步锁;@SneakyThrows 会自动生成 try/catch 捕捉异常;@Slf4j 是日志相关的,会自动为类添加日志支持。以上就是 Lombok 为我们提供的比较常用的注解。

4 lombok的具体使用和底层分析

看完的lombok的简单介绍之后,接下来就开始安装lombok,然后逐个使用上面的所有注解并且依依分析他们底层的实现原理。

No.标题
1Lombok使用1—简介和安装
2Lombok使用2—@Getter & @Setter 及 lombok.config
3Lombok使用3—@toString & @EqualsAndHashCode
4Lombok使用4—@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
5Lombok使用5—@Data & @Value
6Lombok使用6— @Builder
7Lombok使用7— @SneakyThrows & @Synchronized
8Lombok使用8—@Log
9Lombok使用9—@Cleanup & @NonNull
更新时间:2020-09-12 10:58:25

本文由 清水河恶霸 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
原文链接:http://ql.magic-seven.top/2020/09/12/lombok使用所有文章汇总.html
最后更新:2020-09-12 10:58:25

评论

Your browser is out of date!

Update your browser to view this website correctly. Update my browser now

×