在我们 Java 项目里面,有很多 Java Bean 需要为每个属性生成 get/ set 方法,增删改属性都需要维护这些 get/ set 方法甚是麻烦。
今天给大家介绍一款能帮助我们简化这些代码的神器:Lombok!有了这个神器,你的 Java Bean 类的代码量至少可以省一半。
什么是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 库,它能够自动嵌入到你的 IDE 编辑器和编译工具中。有了它,你再也不用写 getter 或者 equals 方法了,还有 val 特性等。
总之,有了这个家伙,可以省掉很多代码的编写,大大减少了工作量和维护的难度。
如何使用Lombok?
1、安装插件和配置依赖
如上图所示,Lombok支持所有主流的 IDE 开发工具及编译构建工具。
在 IDEA 中安装 Lombok 插件,这样在使用 Lombok 的时候就不会编译报错。
下面是 Maven 的依赖配置,在用 Maven 打包的时候也能自动生成需要的代码。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<scope>provided</scope>
</dependency>
如果你使用了 Spring Boot,可以不用带版本号,在 Spring Boot spring-boot-dependencies.pom
这个配置文件里面定义了 Lombok 依赖。
所以,你只需要继承版本号即可,当然,有必要的话,你也可以自定义版本号。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
2、使用注解简化代码
从 IDEA 中的 Lombok 插件特性可以看到支持的注解。
Features
@Getter and @Setter
@FieldNameConstants
@ToString
@EqualsAndHashCode
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger
@Data
@Builder
@Singular
@Delegate
@Value
@Accessors
@Wither
@SneakyThrows
from Intellij 14.1 @val
from Intellij 15.0.2 @var
from Intellij 14.1 @var
from Intellij 2016.2 @UtilityClass
Lombok config system
Code inspections
Refactoring actions (lombok and delombok)
也可以去 Lombok 对应的包里面看所有支持的注解。
现在挑几个讲一下它们的用法吧!
@Getter 和 @Setter
@Getter
@Setter
public class User {
private String name;
private int age;
...
// 无需生成 get/set 方法
}
添加 @Getter
和 @Setter
注解用在 Java Bean 类上面,无需生成 get/ set 方法,会自动生成所有的 get/ set 方法及一个默认的构造方法。
也可以用插件来添加相应的注解。
来看下源码和生成后的代码对比。
@Getter
和 @Setter
注解也可以单独使用在字段上面,同样也会生成对应的 get/ set 方法及一个默认的构造方法。
@ToString
使用在类上,默认生成所有非静态字段以下面的格式输出,如:
public String toString(){
return "Person(userName=" + getUserName() + ", id=" + getId() + ", age=" + getAge() + ", address=" + getAddress() + ", memo=" + getMemo() + ")";
}
里面也有很多参数,用来自定义输出格式。
@NoArgsConstructor
用在类上,用来生成一个默认的无参构造方法。
@RequiredArgsConstructor
用在类上,使用类中所有带有 @NonNull
注解和 final
类型的字段生成对应的构造方法。
@AllArgsConstructor
用在类上,生成一个所有参数的构造方法,默认不提供无参构造方法。
@Data
用在类上,等同于下面这几个注解合集。
- @Getter
- @Setter
- @RequiredArgsConstructor
- @ToString
- @EqualsAndHashCode
@Value
用在类上,等同于下面这几个注解合集。
- @Getter
- @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE)
- @AllArgsConstructor
- @ToString @EqualsAndHashCode}
@NonNull
用在属性上,用于字段的非空检查,如果传入到 set 方法中的值为空,则抛出空指针异常,该注解也会生成一个默认的构造方法。
还有很多,这里不再撰述。
总结
本文介绍了 Lombok 及使用说明,更多的注解使用方式可以去源码里面看吧,有了这个插件,可以帮助你写出更简洁、更优雅、更漂亮的 Java 代码。