这是我参与8月更文挑战的第20天,活动详情查看:8月更文挑战
简介
Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。
- 官方地址:projectlombok.org/
- github地址:github.com/rzwitserloo…
Lombok 注解
@NotNull
作用在方法参数上的注解,用于自动生成空值参数检查。@Cleanup
作用在局部变量上,在作用域结束时会自动调用 close 方法释放资源。@Getter
作用在字段上,会自动生成字段的 Getter;作用在类上,会自动生成该类所有非静态字段的 Getter ,还能控制 Getter 的访问级别@Setter
基本同上。@ToString
类注解,自动生成类的 toString 方法,可以做一些定制,比如不使用某个字段,不调用 Getters 等。@EqualsAndHashCode
类注解,自动生成类中所有非静态非瞬时字段的 equals 方法和 hashCode 方法。@NoArgsConstructor
类注解,自动生成一个无参构造函数。@AllArgsConstructor
类注解,生成一个初始化所有字段的构造函数。@RequiredArgsConstructor
类注解,为final字段和标记了@NotNull
的字段生成构造函数。@Data
类注解,相当于同时应用了@Getter
、@Setter
、@ToString
、@EqualsAndHashCode
、@RequiredArgsConstructor
。如果已经定义了一个构造方法,就不会再自动生成构造方法了。@Value
类注解,和@Data类似,但是用于不可变类型。生成的类和所有字段都设置为final,所有字段都为private,自动生成Getter但是没有Setter,会生成初始化所有字段的构造函数。相当于同时应用了final @ToString
、@EqualsAndHashCode
、@AllArgsConstructor
、@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
和 @Getter。
实际开发中一般常用到的:
@Data
@NoArgsConstructor
@AllArgsConstructor
Lombok 原理
虽然Lombok也用到了注解,但是它并没有用到反射,而是在代码编译时期动态将注解替换为具体的代码。所以JVM实际运行的代码,和我们手动编写的包含了各种工具方法的类相同。
使用
IDE 下载插件
IntelliJ IDEA
- Go to File > Settings > Plugins
- Click on Browse repositories...
- Search for
Lombok Plugin
- Click on Install plugin
- Restart IntelliJ IDEA
依赖包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
下面是简单 Bean 示例
@Data // 生成 getter/setter/equals/canEqual/hashCode/toString
@NoArgsConstructor // 为类提供一个无参的构造方法
@AllArgsConstructor // 为类提供一个全参的构造方法
public class User {
private Integer id;
private String name;
private Integer age;
}