Lombok是用于消除代码,使代码更加简洁和快速。比如通过注解的方式来消除POJO的getter和setter方法,Lombok主要是通过注解的方式来使用的。比如在一个POJO中,一个属性的getter和setter可通过@Getter和@Setter注解来取代,这样代码量很少了,代码如下(注意看红包标记的代码):
上面的代码与下面的代码是等价的。
import javax.persistence.*;public class UserInfo extends BaseEntity{ @Id @Column(name = "Id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; }}在编译后,Lombok的@Getter和@Setter注解,会生成相应的getter和setter方法。 我当时使用Lombok时是在IDEA中开发的,IDEA版本是2017.2,就以IDEA来进行说明。首先在IDEA中安装Lombok插件。依次点击File——>settings——>Plugins,如果搜索不到Lombok插件,则可以通过浏览器栻来安装,操作如下图。
点击“Browse repositonies”后,会弹出新的界面,然后造反“Lombok Plugin”,然后点击右上角的“Install”来安装插件,如下图所示。安装成功后,IDEA会提示你重启IDEA,重启IDEA即可。
在使用时,首先要引入Lombok的jar包,代码如下:
1,@Getter/@Setter:用于生成getter/setter方法,可以用在类或者属性上;若用在属性上,则只是用于替代这个属性的getter方法,如果是用在类上,则是用于替代这个类所有属性的getter方法。还可通过@AccessLeve来控制生成的getter/setter方法的访问权限,Lombok提供了PUBLIC、PROTECTED、PACKAGE、PRIVATE、NONE 和MODULE六个值,前四个值分别是public、protected、包和private,这和Java的访问控制权限是对应的,也很好理解,AccessLevel.NONE手动禁用对应字段的getter和setter生成,MODULE是模块的意思,还没仔细思考其使用的含义。
官网上有一段说是下面这样讲的,但我还没去看具体什么回事,先贴出来可以看看。
要将注释放在生成的方法上,可以使用onMethod=@__({@AnnotationsHere}); 要将注释放在生成的setter方法的唯一参数上,可以使用onParam=@__({@AnnotationsHere})。但要小心!这是一个实验性功能。有关更多详细信息,请参阅onX( 地址t:tps://projectlombok.org/features/experimental/onX)功能的文档。
使用@Getter和@Setter注解之前的代码如下:
//// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)//package com.woxin.itsm;public class Person { private String username; private String sex; private String tel; public Person() { } public String getUsername() { return this.username; } private void setUsername(String username) { this.username = username; } public String getSex() { return this.sex; } public void setSex(String sex) { this.sex = sex; } String getTel() { return this.tel; }}使用之后的代码如下:
package com.woxin.itsm;import lombok.AccessLevel;import lombok.Getter;import lombok.Setter;/** * @Author: Qinciwen * @Description: * @Date: Created in 10:54 2018/5/10 * @Modified By: */public class Person { @Getter @Setter(AccessLevel.PRIVATE) private String username; @Getter @Setter private String sex; @Getter(AccessLevel.MODULE) @Setter(AccessLevel.NONE) private String tel;}@Getter和@Setter还支持的一些配置如下,这些配置可以配置成全局的。
lombok.accessors.chain= [ true| false](默认值:false)
如果设置为true,生成的setter将返回this(而不是void)。注释的显式配置chain参数@Accessors优先于此设置。lombok.accessors.fluent= [ true| false](默认值:false)如果设置为true,生成的getter和setter将不会以“bean标准”作为前缀get,is或者set; 相反,这些方法将使用与该字段相同的名称(减前缀)。注释的显式配置chain参数@Accessors优先于此设置。lombok.accessors.prefix+ = 字段前缀(默认:空列表)这是一个列表属性; 条目可以与+=操作员一起添加。-=操作员可以删除父配置文件中的继承前缀。Lombok将从字段名称中去除任何匹配的字段前缀,以确定要生成的getter / setter的名称。例如,如果m是此设置中列出的前缀之一,则名为的字段mFoobar将导致名为getFoobar()not 的getter getMFoobar()。注释的显式配置prefix参数@Accessors优先于此设置。lombok.getter.noIsPrefix= [ true| false](默认值:false)如果设置为true,为boolean字段生成的getter 将使用get前缀而不是默认is前缀,并且任何生成的调用getter的代码(如@ToString,)也将使用,get而不是islombok.setter.flagUsage= [ warning| error](默认:未设置)@Setter如果配置, Lombok将标记任何用作警告或错误。lombok.getter.flagUsage= [ warning| error](默认:未设置)
@Getter如果配置, Lombok将标记任何用作警告或错误。
另外,下面的说明也值得注意。
为了生成方法名称,该字段的第一个字符(如果是小写字符)是标题封装的,否则它将保持不变。然后,get / set / is是前缀。
如果任何方法已经存在且名称相同(不区分大小写)且参数个数相同,则不会生成任何方法。例如,getFoo()如果已经有一种方法,getFoo(String... x)即使在技术上可行,也不会生成该方法。这个警告的存在是为了防止混淆。如果由于这个原因跳过了方法的生成,则会发出警告。可变参数计为0到N参数。你可以标记任何方法@lombok.experimental.Tolerate来将它们从Lombok上隐藏起来。
对于紧跟着一个标题大小写字母的boolean字段is,没有任何前缀用于生成getter名称。
任何变化boolean都不会导致使用is前缀而不使用get前缀; 例如,返回java.lang.Boolean结果的get前缀,而不是is前缀。
2,@AllArgsConstructor:用于生成全参数的构造函数,用在类上;@NoArgsContructor:用于生成无参数的构造函数,用在类上;@RequiredArgsContructor:为每个需要特殊处理的字段生成一个带有一个参数的构造函数。
6,@Cleanup:用于关闭并释放资源,可以用在IO流上;
7,@Buinder:用于将类改造成builder(建造者)模式,用在类、方法或者构造函数上;
8,@Data:是一个复合注解,用在类上,使用后会生成默认的无参构造函数、所有属性的getter、所有非final属性的setter方法,并重写toString、equals、hashcode方法;
9,val:用于变量上,所声明的变量是final的;
10,var:用于变量上,所声明的变量是非final的;
官网:https://projectlombok.org/features/all