一、介绍
lombok是一个帮助简化代码的工具,通过注解的形式例如@Setter @Getter,可以替代代码中的getter和setter方法,虽然eclipse自带的setter、getter代码生成也不需要我们手动的去敲写,但是使用@Setter @Getter这样的注解,能够使我们的代码看上去更加的简洁、优雅。
二、安装
使用 lombok 是需要安装的,如果不安装,IDE 则无法解析 lombok 注解
1、下载lombok插件
官网:https://www.projectlombok.org/download
百度云:
链接:https://pan.baidu.com/s/1Z4sKHNUPGFhLMJs6rQ1oUg
提取码:nmqc
2、将下载的lombok.jar放在eclipse.ini同级目录下
3、运行jar包(直接点击或者cmd命令:java -jar lombok.jar )
4、选择编译器地址打钩,如果没有识别到电脑上的IDE可以点击下方的Specify location添加ide可执行文件路径
5、 检查eclipse.ini文件中-javaagent:D:xxxlombok.jar地址是否有误(如果路径含中文会启动失败)
6、重启eclipse,就发现能够正常使用啦
三、使用
注意:使用之前需要先按照以上步骤安装,在eclipse.ini配置
1、引入依赖
在pom.xml中添加如下依赖:
<!-- 简化代码工具lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency>
2、常见注解解析
Lombok的使用方法只需在对用类或方法添加对应注解即可
在线官方文档:https://projectlombok.org/features/all
(1)@Getter
,
@Setter
该注解使用在类或者属性上,该注解可以使用在类上也可以使用在属性上。生成的getter遵循布尔属性的约定。例如:boolean类型的Foo,getter方法为isFoo
而不是getFoo
在使用该注解时,会默认生成一个无参构造。和对应的getter, setter。
关于boolean类型的数据,仔细看以下例子:
package com.lemon.zuul.config; import lombok.Getter; import lombok.Setter; @Getter @Setter public class TestDemo { private String userName; private int userAge; private boolean userSex ; private boolean isLeader; }
图中布尔类型为基本数据类型
setter方法
上图第一行为成员变量isLeader的setter方法,其中isLeader中的is不见了,下方第四行为成员变量userSex的setter方法,一切正常。
getter方法
长这样,get方法的生成规范是对于布尔基本数据类型是is+变量名,如果变量名包含了一个is那么也是只有一个is不会是isIsxxx。
eclipse自动生成规则同上
修改布尔变量为对应包装类
package com.lemon.zuul.config; import lombok.Getter; import lombok.Setter; @Getter @Setter public class TestDemo { private String userName; private int userAge; private Boolean userSex ; private Boolean isLeader; }
setter方法
符合我们想要的
getter方法
也符合我们想要的
总结:布尔类型为对应包装类时,setter、getter生成符合我们预期结果,而为基本数据类型时,get类的方法是以is开头。
(2)@Data
该注解使用在类上,该注解是最常用的注解,它结合了@ToString,@EqualsAndHashCode, @Getter和@Setter。本质上使用@Data
注解,类默认@ToString
和@EqualsAndHashCode
以及每个字段都有@Setter
和@getter
。该注解也会生成一个公共构造函数,可以将任何@NonNull
和final
字段作为参数。
虽然@Data
注解非常有用,但是它没有与其他注解相同的控制粒度。@Data
提供了一个可以生成静态工厂的单一参数,将staticConstructor
参数设置为所需要的名称,Lombok自动生成的构造函数设置为私有,并提供公开的给定名称的静态工厂方法。
注解示例:
@Data(staticConstructor="of") public class Company { private final Person founder; private String name; private List<Person> employees; }
等同于Java源代码:
public class Company { private final Person founder; private String name; private List<Person> employees; private Company(final Person founder) { this.founder = founder; } public static Company of(final Person founder) { return new Company(founder); } public Person getFounder() { return founder; } public String getName() { return name; } public void setName(final String name) { this.name = name; } public List<Person> getEmployees() { return employees; } public void setEmployees(final List<Person> employees) { this.employees = employees; } @java.lang.Override public boolean equals(final java.lang.Object o) { if (o == this) return true; if (o == null) return false; if (o.getClass() != this.getClass()) return false; final Company other = (Company)o; if (this.founder == null ? other.founder != null : !this.founder.equals(other.founder)) return false; if (this.name == null ? other.name != null : !this.name.equals(other.name)) return false; if (this.employees == null ? other.employees != null : !this.employees.equals(other.employees)) return false; return true; } @java.lang.Override public int hashCode() { final int PRIME = 31; int result = 1; result = result * PRIME + (this.founder == null ? 0 : this.founder.hashCode()); result = result * PRIME + (this.name == null ? 0 : this.name.hashCode()); result = result * PRIME + (this.employees == null ? 0 : this.employees.hashCode()); return result; } @java.lang.Override public java.lang.String toString() { return "Company(founder=" + founder + ", name=" + name + ", employees=" + employees + ")"; } }
(3)@NonNull
该注解使用在属性上,该注解用于属的非空检查,当放在setter方法的字段上,将生成一个空检查,如果为空,则抛出NullPointerException
。 该注解会默认是生成一个无参构造。
注解示例和Java源代码:
(4)@EqualsAndHashCode
该注解使用在类上,该注解在类级别注释会同时生成equals
和hashCode
。
注解示例和Java源代码:
(5)@toString
该注解使用在类上,该注解默认生成字段以名称-值的形式输出。
注解示例和Java源代码:
(6)@Value
这个注解用在 类 上,会生成含所有参数的构造方法,get 方法,此外还提供了equals、hashCode、toString 方法。 没有setter
(7) @Log4j
注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
(8)NoArgsConstructor
注解在类上;为类提供一个无参的构造方法
(9)AllArgsConstructor
注解在类上;为类提供一个全参的构造方法