前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >十分钟搞懂 Lombok 使用与原理

十分钟搞懂 Lombok 使用与原理

作者头像
业余草
发布2019-12-03 15:15:27
1.5K0
发布2019-12-03 15:15:27
举报
文章被收录于专栏:业余草业余草

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/xmt1139057136/article/details/103342205

Lombok 在编程圈逐渐的流行了起来,虽然我不太推荐使用它,但还是很有必要的学会如何使用它以及了解它的设计原理!

现在有这样一个场景,我们项目中的某些实体类,随着业务的推进,经常会增加一些字段。这些字段大多都需要提供 get/set 方法,我们可以借助开发工具来一键生成。但是每当增加一个字段时,都需要再生成一次对应的 get/set 方法,太繁琐了。于是 Lombok 诞生了,它可以用来帮助开发人员消除 Java的冗长代码,尤其是对于简单的 Java 对象(POJO)。

想要使用 Lombok,必须要安装一个 Lombok 插件,不然的话,ide 编辑器会无法识别 Lombok 的注解,报找不到方法的异常。

以 idea 为例,直接在工具中搜索 Lombok 插件,然后安装它。安装完成后重启 idea 开发工具即可。

接下来,我们需要在使用 Lombok 的项目中引入 Lombok 的 jar 包。Maven 的 POM.xml 中引入以下配置:

然后在项目中的 get/set 就可以被我们替换成下面的代码:

Lombok 有非常多的注解,下面是这些注解的解释说明。

Lombok 的 val 可能用的人比较少,但其实它才是最值得推荐使用的一个,类似 JavaScript 的 val。

@NonNull 的用法也很常见。

@Cleanup 关闭流的做法。

@ToString 的用法。

@EqualsAndHashCode 的用法。

最常用的 @Data 的用法。

还有最常用的 @Builder 的用法。

更多关于 Lombok 注解的用法,我就不一一列举了,大家可以看我上面的那个注解说明。

最后我说一下 Lombok 的原理。通过它的注解,我们可以看到,Lombok 的注解都定义了 @Retention 为 RetentionPolicy.RUNTIME 的代码。这样它只能在运行时通过反射来获取注解值,使得运行时代码效率降低。其次,如果想在编译阶段利用注解来进行一些检查,对用户的某些不合理代码给出错误报告,反射的使用方法就无能为力了。好在,我们现在有了 JSR 269,它可以让我们在 Javac 的编译期利用注解做这些事情。所以我们发现核心的区分是在运行期还是编译期。

在 Lombok 的处理流程中,Javac 解析成抽象语法树之后(AST),Lombok 根据自己的注解处理器,动态的修改 AST,增加新的节点(所谓代码),最终通过分析和生成字节码。

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

所以,到底是时势造英雄,还是英雄造时势,那就真的是仁者见仁智者见智了。

当然,如果你对 Lombok 的现有注解还不满意,还可以自定义的实现自己的注意,前提是你的注解要支持 JSR 269 规范!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档