前言
在日常开发中,我们时常需要编写一些重复的、非业务相关的功能性代码。比如实体类私有属性的 get / set
方法、创建日志输出类等。
这也是 Java 饱受诟病的地方之一。往往这些冗余的代码虽然跟业务无关,但由于其功能性又不得不写,十分浪费时间,影响美观不说,后期如果有改动还不方便维护。
为了解决上述痛点,就不得不提到神器 Lombok 了。有了 Lombok,在开发中我们就可以使用简单的注解,来避免编写那些重复的功能性代码。在编译的时候,Lombok 会根据注解自动帮我们生成我们省去的那些代码。是不是很神奇?那么接下来我就来介绍下 Lombok 的常见使用方法。
环境配置
添加 Maven 依赖
在 pom.xml
添加 Maven 依赖。
1 2 3 4 5
| <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.22</version> </dependency>
|
在 IDEA 中添加 Lombok 插件
打开 IntelliJ IDEA -> Preferences -> Plugins,搜索“Lombok”并安装。

如果不安装该插件,是不影响程序的正常运行。但是在开发中会出现红波浪线浪报警,看着令人恼火。安装这个插件,是为了让编译器支持解析 Lombok 注解,在使用时不报错。
Lombok 的使用
@Getter
& @Setter
@Getter
& @Setter
注解可以用于自动生成实体类中私有属性的 get
和 set
方法。
Lombok 写法
1 2 3 4 5 6 7
| @Getter @Setter public class Person { private int id; private String name; private int age; }
|
将 @Getter
& @Setter
注解打在类上,那么该类中的所有方法都将生成 get
和 set
方法。如果想要对个别属性单独配置,也可以将 @Getter
& @Setter
注解打在需要的属性上。
等价的 Java 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public class Person { private int id; private String name; private int age;
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; } }
|
@ToString
用于重写 toString() 方法,将类中的属性一次输出。
Lombok 写法
1 2 3 4 5 6
| @ToString(callSuper = true) public class Person { private int id; private String name; private int age; }
|
等价的 Java 代码
1 2 3 4 5 6 7 8 9 10 11 12
| public class Person { private int id; private String name; private int age;
public String toString() { return "Foo(super=" + super.toString() + ", id=" + this.id + ", name=" + this.name + ", age=" + this.age + ")"; } }
|
@ToString()
中常用属性:
- callSuper: 默认为 false。true 时会把 super 中的 toString() 方法一并输出。
- onlyExplicitlyIncluded:是否只输出指定属性。默认为 false。
- include:可以指定要输出哪些属性。要配合
onlyExplicitlyIncluded
属性使用。
- exclude:可以指定不输出哪些属性。
@EqualsAndHashCode
用于重写 equals()
和 hashCode()
方法。
Lombok 写法
1 2 3 4 5 6
| @EqualsAndHashCode public class Person { private int id; private String name; private int age; }
|
等价的 Java 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| public class Person { private int id; private String name; private int age;
public boolean equals(final Object o) { if (o == this) { return true; } else if (!(o instanceof Person2)) { return false; } else { Person2 other = (Person2)o; if (!other.canEqual(this)) { return false; } else if (this.id != other.id) { return false; } else { Object this$name = this.name; Object other$name = other.name; if (this$name == null) { if (other$name == null) { return this.age == other.age; } } else if (this$name.equals(other$name)) { return this.age == other.age; }
return false; } } }
protected boolean canEqual(final Object other) { return other instanceof Person2; }
public int hashCode() { int PRIME = true; int result = 1; int result = result * 59 + this.id; Object $name = this.name; result = result * 59 + ($name == null ? 43 : $name.hashCode()); result = result * 59 + this.age; return result; } }
|
@Data
一般,我使用 @Data
注解最多。@Data
注解是将 @ToString
、@EqualsAndHashCode
、@Getter
、@Setter
集合与一身。
Lombok 写法
1 2 3 4 5 6
| @Data public class Person { private int id; private String name; private int age; }
|
等价的 Java 因为篇幅过长我就不贴了,因为是集合上述的四个注解,所以等价代码等于上述等价代码的合并。
@Log
@Log
类注解用于创建日志输出类。支持如下几种模式,分别对应不同的日志框架。
- @CommonsLog
- @Flogger
- @JBossLog
- @Log
- @Log4j
- @Log4j2
- @Slf4j
- @XSlf4j
- @CustomLog
我常用的类型是 @Slf4j
。
Lombok 写法
1 2 3 4 5 6 7 8
| @Slf4j @Service public class MyServiceImpl implements MyService { @Override public void test() { log.info("使用 @Slf4j 输出日志"); } }
|
等价的 Java 代码
1 2 3 4 5 6 7 8 9 10 11
| @Service public class MyServiceImpl implements MyService { private static final Logger log = LoggerFactory.getLogger(MyServiceImpl.class);
public MyServiceImpl() { }
public void test() { log.info("使用 Logger 输出日志"); } }
|
以上就是开发中常用的 Lombok 注解,确实能在很大程度上帮助我们简化代码,让开发人员把更多精力集中在业务代码的编写。尤其是在对 POJO 的操作上,碰上属性特别多的类,只需要标注一个 @Data
注解,就能少些很多代码。
本文仅介绍一些常用的 Lombok 注解。想要了解更多 Lombok 内容,可以参考其它资料。
本章代码地址:GitHub
推荐文章:
我是因特马,一个爱分享的斜杠程序员~
欢迎关注我的公众号:因特马
