access 增加字段 工具_Java效率工具之Lombok

作者:LiWenD正在掘金

来源:https://juejin.im/post/5b00517cf265da0ba0636d4b

上一篇:数据库查询速度优化之解决技巧

还在编写无聊枯燥又难以维护的POJO吗?洁癖者的春天在哪里?请看Lombok!

在过往的Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString;异常处理;I/O流的关闭操作等等,这些样板代码既没有技术含量,又影响着代码的美观,Lombok应运而生。

首先说明一下:任何技术的出现都是为了解决某一类问题的,如果在此基础上再建立奇技淫巧,不如回归Java本身。应该保持合理使用而不滥用。Lombok的使用非常简单,下面我们一起来看下:

1)引入相应的maven包:

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

2)添加IDE工具对Lombok的支持:

IDEA中引入Lombok支持如下:

  • 点击File-- Settings设置界面,安装Lombok插件:
95febeb34eb0e830772a18cb0e9e76f2.png
  • 点击File-- Settings设置界面,开启Annocation Processors:
ca7081eaecbf161d2f0708737f28e228.png

开启该项是为了让Lombok注解在编译阶段起到作用。Eclipse的Lombok插件安装可以自行百度,也比较简单,值得一提的是,由于Eclipse内置的编译器不是Oracle javac,而是eclipse自己实现的Eclipse Compiler for Java (ECJ).要让ECJ支持Lombok,需要在eclipse.ini配置文件中添加如下两项内容:

-Xbootclasspath/a:[lombok.jar所在路径]-javaagent:[lombok.jar所在路径]

3)Lombok实现原理:

自从Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候得到调用。Lombok就是一个实现了"JSR 269 API"的程序。在使用javac的过程中,它产生作用的具体流程如下:

  • javac对源代码进行分析,生成一棵抽象语法树(AST)
  • javac编译过程中调用实现了JSR 269的Lombok程序
  • 此时Lombok就对第一步骤得到的AST进行处理,找到Lombok注解所在类对应的语法树(AST),然后修改该语法树(AST),增加Lombok注解定义的相应树节点
  • javac使用修改后的抽象语法树(AST)生成字节码文件

4)Lombok注解的使用:

POJO类常用注解:

@Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的getter/setter方法。可以设定访问权限及是否懒加载等。

7386aabd98a24d2575f834cd2e56c0e2.png

在Structure视图中,可以看到已经生成了getter/setter等方法:

35822313be282e729230dd58b42c450a.png

编译后的代码如下:[这也是传统Java编程需要编写的样板代码]

@ToString:作用于类,覆盖默认的toString()方法,可以通过of属性限定显示某些字段,通过exclude属性排除某些字段。

4cd407ac895314300c72ca4101ca4273.png

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

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

bb2a716f25c80da1a9656ac8e39ee587.png

@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor:作用于类上,用于生成构造函数。有staticName、access等属性。

staticName属性一旦设定,将采用静态方法的方式生成实例,access属性可以限定访问权限。

@NoArgsConstructor:生成无参构造器;

@RequiredArgsConstructor:生成包含final和@NonNull注解的成员变量的构造器;

@AllArgsConstructor:生成全参构造器。

2f57a0ef3a46fcb8b9fc409903445648.png

编译后结果:

@Data:作用于类上,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor

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

@Log:作用于类上,生成日志变量。针对不同的日志实现产品,有不同的注解:

b45d480e34acfb3b55724916ab1f3b5d.png

其他重要注解:

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

a1d7878d7a6040db233eb0c0ce002cc8.png

编译后结果如下:

4ba6931daf9d4187dd5f31cd0f0e6d15.png

是不是简洁了太多。

@SneakyThrows:可以对受检异常进行捕捉并抛出,可以改写上述的main方法如下:

456adecc77f889c5c9fd36627f86ff0a.png

@Synchronized:作用于方法级别,可以替换synchronize关键字或lock锁,用处不大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂 | 进程并发与同步

并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理多个任务的能力。并发和并行看起来很像,但实际上是有区别的,如下图(图片来源于网络):concurrency-parallelism上图的意思是&a…

快速完成和读懂测试计划

每个项目测试计划都会不一样,但是一般情况下,每个公司都会有相应的模板,尤其是项目很频繁的公司,相对应的模板应该就更全面,并且更容易修改,更能适应新项目。 并且,经常接触测试计划的人可能会察…

rust卡领地柜权限_RFID智能医疗耗材柜,上海智能高值耗材柜,国药智能医用耗材柜...

近几年因为我们的医疗改革一直在进步并改革,国家对我们的医疗方面的补助也有了明显的加大投入,与此同时让各种公立私立医院如雨后春笋般层出不穷,各大医院为了在医疗市场占有一席之地,都在各个方面开始想办法提升自己医院的水准。…

刚接触电子时,有过哪些百思不得其解的问题?

青少年时期,刚接触电子时,出于好奇,对这方面的东西也比较关注,但同时也衍生了一些百思不得其解的疑问,比如...01物理书里说大地是导体,那为什么我的小灯珠却不亮!?02初三时学了物理的…

建立管理SQL Server登录帐户

1、打开SQL Server 2005的管理工具,选择以windows身份验证模式登陆。然后右击服务器选择属性。2、在打开的服务器属性页面中,选择“安全性”做如下图设置:3.在windows上新建三个组:ReceptionEmployees,ITEmployees。4、然后在SQL …

属性

属性 属性的作用就是保护字段、对字段的赋值和取值进行限定。 属性的本质就是两个方法,一个叫get()一个叫set()。 既有get()也有set()我们诚之为可读可写属性。 只有get()没有set()我们称之为只读属性 没有get()只有set()我们称之为只写属性 private char _gender; …

c++ doxygen 注释规范_利用Doxygen给C程序生成注释文档

利用Doxygen为C程序生成注释文档一、Doxygen工具的安装利用Doxygen工具生成API帮助文档需要下载安装以下三个软件:(1)Doxygen:可以从一套归档源文件开始,生成HTML格式的在线类浏览器,或离线的LATEX、RTF参考手册。本文中所使用的版…

【2021新版】一线大厂 Go 面试题合集

秋天到了,又到了工程师们躁动不安,蠢蠢欲动的季节~这不,金九银十已然到了家门口,现在后台就有不少人问我:现在外边大厂面试都问啥想去大厂又怕面试挂面试应该怎么准备Go 开发前景如何啥样的后端适合切 Go 技术栈...面试…

python开发【基础二】

基本数据类型: 1、数字 在Python2中,分为整形(int)和长整形(long)。 在Python3中,都是int。 #1、将字符串转换为数字 a "123" v int(a) print(v) print(type(v))#2、当前数字的二进制,至少用几位表示 1位等于8个字节.…

微软白皮书发布:在IIS7.5中用Service Bus端点寄宿WCF服务

公告:本博客为微软云计算中文博客的镜像博客。部分文章因为博客兼容性问题,会影响阅读体验。如遇此情况,请访问原博客。 针对如何在IIS中寄宿Service Bus的问题,微软官方提供了白皮书详细介绍了解决方案。有兴趣的读者可以从下面的…

oracle数据库时分秒格式_Oracle如何输出指定格式的日期时间数据呢?

摘要:下文讲述Oracle数据库输出指定的日期时间格式的方法分享,如下所示;实现思路:使用TO_CHAR系统函数,指定输出格式为*******,即可将日期时间转换为指定格式的字符串如:SELECT TO_CHAR(SYSDATE,YYYY/MM/DD) AS MONTH …

can总线资料

应知识星球的同学要求,整理了一些can总线资料。在公众号后台回复 【can总线】获取资料截图推荐阅读:专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈

Go语言基础之4--流程控制

一、if else语句 1.1 基本语法1 语法1: if condition { //do something } 语法2: if condition { //do something } else { //do something } 语法3: if condition { //do something } else if condition { //do something } else { //do som…

正则表达式 学习笔记3.4

第一段为合法html代码&#xff0c;第二段为不合法html代码。<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />[^<]匹配非<的任意多个字符\\w[^<]</\\w>;开头用来匹配开始tag结尾用来匹配结束tag中间用来匹配文本。…

大家都挺难的​

这是昨天小号发的一个推文小时候觉得读书苦 但是现在想想&#xff0c;如果那时候跟现在一样用功 考上北大清华都没问题然后想到跟我家小云聊天的内容&#xff0c;挺有感触的。小云最近在我们小区的业委会上班&#xff0c;业委会在我家旁边&#xff0c;上班就是从这栋楼到另一栋…

android handler封装_Handler都没搞懂,你拿什么去跳槽啊?!

0. 前言做 Android 开发肯定离不开跟 Handler 打交道&#xff0c;它通常被我们用来做主线程与子线程之间的通信工具&#xff0c;而 Handler 作为 Android 中消息机制的重要一员也确实给我们的开发带来了极大的便利。Handler应用之广泛&#xff0c;可以说只要有异步线程与主线程…

ORA-12514: TNS:监听程序当前无法识别连接描述符中请(转)

http://blog.sina.com.cn/s/blog_628ed1290100gci9.html转载于:https://www.cnblogs.com/gaofei_work/archive/2010/05/19/1739174.html

做梦也想有一个这样的实验室

从现在开始&#xff0c;努力攒钱&#xff0c;等有钱了&#xff0c;自己也开一个这样的实验室。推荐阅读&#xff1a;专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号&#xff0c;后台回复「1024」获取学习资料网盘链接。欢迎点赞&#xff0c;关注&#xff…

matplotlib绘制矢量图像(svg),pdf and ps文件

机器学习的过程中处理数据&#xff0c;会遇到数据可视化的问题&#xff0e; 大部分都是利用python的matplotlib库进行数据的可视化处理&#xff0e; plt.show() 默认都是输出.png文件&#xff0c;图片只要稍微放大一点&#xff0c;就糊的不行&#xff0e; 下面给出一段正常进行…

vue获取div中的值_一篇文章看懂Vue.js的11种传值通信方式

面试的时候,也算是常考的一道题目了,而且,在日常的开发中,对于组件的封装,尤其是在 ui组件库中,会用到很多,下面,就来详细的了解下,通过这篇文章的学习,可以提升项目中组件封装的灵活性,可维护性,话不多说,先从大致的通信方式分类说起,然后依次非常详细地介绍,看…