公司新闻 您现在的位置: 官网首页 > 新闻资讯 > 公司新闻 >

Lombok 使用详解,简化Java编程

发布者:admin 发布时间:2019-12-06

在 java 运用程序中存在许多重复类似的、生成之后简直不对其做更改的代码,可是咱们还不得不花费许多精力编写它们来满意 java 的编译需求

比方,在 java 运用程序开发中,咱们简直要为一切 bean 的成员变量增加 get ,set 等办法,这些相对固定但又不得不编写的代码糟蹋程序员许多精力,一起让类内容看着更凌乱,咱们期望将有限的精力重视在更重要的当地。

lombok 现已诞生很久了,甚至在 spring boot initalizr 中都已加入了 lombok 选项,


这儿咱们将 lombok 做一下详细阐明:

官网的介绍:project lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. never write another getter or equals method again. early access to future java features such as val, and much more.

直白的说: lombok 是一种 java™ 实用东西,可用来协助开发人员消除 java 的冗长,尤其是关于简略的 java 目标。它经过九五至尊网站2注解完成这一意图,且看:

传统的 pojo 类是这样的


经过lombok改造后的 pojo 类是这样的


一眼能够观察出来咱们在编写 employee 这个类的时分经过 @data 注解就现已完成了一切成员变量的 get 与 set 办法等,一起 employee 类看起来愈加明晰简练。lombok 的奇特之处不止这些,丰厚的注解满意了咱们开发的大都需求。

检查下图,@data的完成,咱们发现这个注解是运用在编译阶段的


这和咱们大大都运用的注解,如 spring 的注解是有很大不同的,如spring 的@restcontroller 注解


一个更直接的表现便是,一般的包在引证之后一般的 ide 都能够主动识别语法,可是 lombok 的这些注解,一般的 ide 都无法主动识别,因而假如要运用 lombok 的话还需求合作装置相应的插件来支撑 ide 的编译,避免ide 的主动检查报错,下面以 intellij idea 举例装置插件。

在repositories中查找lombok,装置后重启ide即可


在maven或gradle工程中增加依靠


至此咱们就能够运用 lombok 供给的注解干些工作了。

lombok官网供给了许多注解,可是 “劲酒虽好,可不要贪杯哦”,接下来逐个讲解官网引荐运用的注解


该注解可运用在类或成员变量之上,和咱们料想的相同,@getter 和 @setter 便是为成员变量主动生成 get 和 set 办法,默许生成拜访权限为 public 办法,当然咱们也能够指定拜访权限 protected 等,如下图:


成员变量name指定生成set办法,而且拜访权限为protected;boolean类型的成员变量 female 只生成get办法,并修正办法名称为 isfemale。当把该注解运用在类上,默许为一切非静态成员变量生成 get 和 set 办法,也能够经过 accesslevel.none 手动制止生成get或set办法,如下图:


该注解需运用在类上,为咱们生成 object 的 tostring 办法,而该注解里边的几个属功用愈加丰厚咱们想要的内容, exclude 特点制止在 tostring 办法中运用某字段,而of属功用够指定需求运用的字段,如下图:

检查编译后的employee.class得到咱们预期的成果,如下图


该注解需运用在类上,运用该注解,lombok会为咱们生成 equals 和 hashcode 办法,包括一切非静态特点和非transient的特点,相同该注解也能够经过 exclude 特点扫除某些字段,of 特点指定某些字段,也能够经过 callsuper 特点在重写的办法中运用父类的字段,这样咱们能够更灵敏的界说bean的比对,如下图:


检查编译后的employee.class文件,如下图:


该注解需运用在办法或结构器的参数上或特点上,用来判别参数的合法性,默许抛出 nullpointerexception 反常

检查nonnullexample.class文件,会为咱们抛出空指针反常,如下图:

当然咱们能够经过指定反常类型抛出其他反常,lombok.nonnull.exceptiontype = [nullpointerexception | illegalargumentexception] , 为完成此功用咱们需求在项意图根目录新建lombok.config文件:

从头编译nonnullexample类,现已为咱们抛出不合法参数反常:

以上三个注解分别为咱们生成无参结构器,指定参数结构器和包括一切参数的结构器,默许情况下,@requiredargsconstructor, @allargsconstructor 生成的结构器会对一切符号 @nonnull 的特点做非空校验。

无参结构器很好了解,咱们首要看看后两种,先看 @requiredargsconstructor


从上图中咱们能够看出, @requiredargsconstructor 注解生成有参数结构器时只会包括有 final 和 @nonnull 标识的 field,一起咱们能够指定 staticname 经过生成静态办法来结构目标

检查employee.class文件


当咱们把 staticname 特点去掉咱们来看遍今后的文件:


相信你现已注意到细节

@allargsconstructor 就更简略了,请咱们自行检查吧

介绍了以上的注解,再来介绍 @data 就十分简单懂了,@data 注解运用在类上,是@tostring, @equalsandhashcode, @getter / @setter 和 @requiredargsconstructor合力的表现,如下图:

函数式编程或者说流式的操作越来越盛行,运用在大大都语言中,让程序更具更简介,可读性更高,编写更连接,@builder就带来了这个功用,生成一系列的builder api,该注解也需求运用在类上,看下面的比如就会愈加明晰明晰。

编译后的employee.class文件如下:

妈妈再也不必忧虑我 set 值那么麻烦了,流式操作搞定:


该注解需求运用到类上,在编写服务层,需求增加一些日志,以便定位问题,咱们一般会界说一个静态常量logger,然后运用到咱们想日志的当地,现在一个注解就能够完成:

检查class文件,和咱们料想的相同:

log有许多变种,commonlog,log4j,log4j2,slf4j等,lombok仍旧杰出的经过变种注解做杰出的支撑:


我实际运用的是 @slf4j 注解

了解 javascript 的同学都知道,var 能够界说任何类型的变量,而在 java 的完成中咱们需求指定详细变量的类型,而 val 让咱们脱节指定,编译之后就精准匹配上类型,默许是 final 类型,就像 java8 的函数式表达式,- system.out.println; 就能够解析到runnable函数式接口。


检查解析后的class文件:


当咱们对流进行操作,咱们一般需求调用 close 办法来封闭或完毕某资源,而 @cleanup 注解能够协助咱们调用 close 办法,而且放到 try/finally 处理块中,如下图:

编译后的class文件如下,咱们发现被try/finally围住处理,并调用了流的close办法


其实在 jdk1.7 之后就有了 try-with-resource,不必咱们显式的封闭流,这个请咱们自行看吧

lombok的根本操作流程是这样的:

lombok 当然还有许多注解,我引荐运用以上就足够了,这个东西是带来便当的,而不能被其绑缚,“弱水三千只取一瓢饮,代码千万需抓要点看”,lombok 能让我愈加专心有用代码扫除含义细小的障眼代码,别的lombok生成的代码还能像运用东西类相同便利。

更多内容请检查官网:https://www.projectlombok.org/