当前位置:网站首页 > Java教程 > 正文

java lombok 教程



IT老哥,一个在大厂做高级Java开发的程序员,每天分享技术干货文章

Lombok 是一款好用顺手的工具,就像 Google Guava 一样。可用来帮助开发人员消除 Java 的,尤其是对于简单的 Java 对象(POJO)。它通过注释实现这一目的。

通过在开发环境中实现 Lombok,开发人员可以节省构建诸如和这样的方法以及以往用来分类各种 accessor 和 mutator 的大量时间。

val 示例

@NonNull 示例

@Cleanup 示例

@Getter/@Setter 示例

@ToString 示例

@EqualsAndHashCode 示例

@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor 示例

@Data 示例

@Value 示例

@Builder 示例

@SneakyThrows 示例

@Synchronized 示例

@Getter(lazy = true)

可能熟悉 Java 自定义注解的同学已经猜到,Lombok 这款插件正是依靠的 Java 自定义注解处理 API(JSR 269: Pluggable Annotation Processing API)来实现

在 Javac 编译阶段利用“Annotation Processor”,对自定义的注解进行预处理后生成真正在 JVM 上面执行的“”。有兴趣的同学反编译带有 Lombok 注解的类文件也就一目了然了。其大致执行原理图如下:

从上面的这个原理图上可以看出 Annotation Processing 是编译器在解析 Java 源代码和生成 Class 文件之间的一个步骤。其中 Lombok 插件具体的执行流程如下:

从上面的 Lombok 执行的流程图中可以看出,在 Javac 解析成之后, Lombok 根据自己编写的注解处理器,动态地修改 AST,增加新的节点(即 Lombok 自定义注解所需要生成的代码),最终通过分析生成 JVM 可执行的字节码 Class 文件。

使用 Annotation Processing 自定义注解是在进行修改,而 JDK 的反射技术是在运行时动态修改,两者相比,反射虽然更加灵活一些但是带来的性能损耗更加大。

需要更加深入理解 Lombok 插件的细节,自己查阅其源代码是必比可少的。对开源框架代码比较有执着追求的童鞋可以将 Lombok 的源代码工程从 github 上 download 到本地进行阅读和自己调试。下图为 Lombok 工程源代码的截图:

熟悉 JSR 269: Pluggable Annotation Processing API 的同学可以从工程类结构图中发现 AnnotationProcessor 这个类,是 Lombok处理的。

该类有两个比较的方法一个是方法,另外一个是方法。

在方法中,先用来做,将类中定义的内部类(JavacDescriptor、EcjDescriptor)先注册到类型定义的列表中。其中,内部静态类—在其加载的时候就将 lombok.javac.apt.LombokProcessor 这个类进行对象。

在 LombokProcessor 处理器中,其中的方法会根据来分别运行相应的 handler 处理类。Lombok 中的多个自定义注解都分别有对应的 handler 处理类,如下图所示:

可以看出,在 Lombok 中对于其进行实际的、和的正是这些类。对于其实现的细节可以具体参考其中的代码。

,,(包括、Redis、MongoDB、SQL Server),流量包,流量包,资源包,ckafka,资源包,套餐,(WAF),(包含高防包及高防IP),,,手游安全,、 等等。

  • 上一篇: java回调函数教程
  • 下一篇: java编代码教程
  • 版权声明


    相关文章:

  • java回调函数教程2024-11-25 12:34:04
  • 微信接口开发教程 java2024-11-25 12:34:04
  • java discuz论坛开发教程2024-11-25 12:34:04
  • java排查全套教程2024-11-25 12:34:04
  • java idea gui编程教程2024-11-25 12:34:04
  • java编代码教程2024-11-25 12:34:04
  • java免费全集教程2024-11-25 12:34:04
  • 杰普java教程2024-11-25 12:34:04
  • java gui开发 教程2024-11-25 12:34:04
  • vscode Java教程2024-11-25 12:34:04