Lombok快速入门

Lombok是一个工具,通过它可以使用简单注解来精简代码达到消除冗余代码的目的。

Lombok的优点

  • 提高编码效率
  • 使代码更简洁
  • 消除冗长代码
  • 避免修改字段名字时忘记修改方法名

当然,要使用该工具必须要IDE支持才行。

Lombok原理

Lombok支持了JSR 269 Pluggable Annotation Processing APIjavac从Java6开始支持“JSR 269 API”规范,只要程序实现了该API,就能在javac运行的时候得到调用。

Lombok实现了“JSR 269 API”,在编译时,javac编译代码的具体流程如下

Lombok原理

  1. 首先,javac通过分析java源代码,生成抽象语法树(AST)
  2. 然后,javac会调用实现了“JSR 269”的Lombok注解处理器(Lombok Annotation Processor),该处理器会使用Lombok Annotation Handler修改使用了Lombok注解的类相对应的抽象语法树(AST)
  3. 最后,javac对修改后的抽象语法树(Modified AST)进行分析,然后生成(Analyze and Generate)字节码文(Byte Code)

使用Lombok

本篇使用的IDEIDEA,为了在项目中使用Lombok,需要做以下准备

  1. 引入Lombok依赖

    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.18</version>
    </dependency>
  2. IDE安装Lombok插件
    1)为了安装该插件,点击菜单File->Settings…,弹出Settings界面,选择Plugins选项
    Settings界面
    ​ 2) 选择右侧的Browse repositories按钮,在弹出的界面中搜索Lombok,点击Install,然后重启IDE即可
    安装Lombok插件

  3. 添加注解
    | 注解 | 作用 |
    | :—————–: | :———————————————————-: |
    | @Data | @Data注解包含了@Getter、@Setter、@EqualsAndHashCode、@ToString,同时还增加了protected的canEqual方法 |
    | @Getter | |
    | @Setter | |
    | @NoArgsConstructor | 无参构造器 |
    | @AllArgsConstructor | 所有参数的构造器 |
    | @ToString | 可以包含exclude属性排除某字段,of只要某些字段 |
    | @EqualsAndHashCode | 可以包含exclude属性排除某字段,of只要某些字段 |
    | @Slf4j | 可以直接使用log对象相关方法打印日志(项目使用logback日志框架时使用) |
    | @Log4j | 可以直接使用log对象相关方法打印日志 (项目使用log4j日志框架时使用) |

下面来看一个示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import lombok.*;
import java.util.Date;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(of="id")
public class Category {
private Integer id;
private Integer parentId;
private String name;
private Boolean status;
private Integer sortOrder;
private Date createTime;
private Date updateTime;
}

在这个例子中,注解@Getter@Setter分别用于生成Pojo字段的gettersetter方法,@NoArgsConstructor用于生成无参构造器,@AllArgsConstructor用于生成包含全部参数的构造器,而@EqualsAndHashCode(of=”id”)则用于生成该PojoequalshashCode方法,of属性指定了在这两个方法中,只使用字段id,当id相同时,则表示两实例是同一个。

使用Lombok时的注意事项

尽管Lombok如此好用,但是还是要注意正确使用Lombok,下面是使用过程中的一些注意事项

  • 在类需要序列化、反序列化详细控制字段时慎用
  • 使用Lombok虽然能够省去手动创建Getter和Setterf方法等繁琐,但是降低了源代码文件的可读性和完整性,降低了阅读源代码的舒适度
  • 使用@Slf4j还是@Log4j看项目使用的日志框架
  • 在适当的地方使用Lombok,例如POJO