大多数项目里都会有很多bean,每次都要手写或用IDE自动生成setter getter方法,搞得代码很长而且没有啥意义;如果需要经常添加 / 减少 / 变更bean对象的字段,则更是麻烦。

这时候,就可以使用Lombok注解自动为这些对象生成getter、setter、toString等方法,免去这些麻烦,且代码更加简洁。

使用注意点:由于lombok会在编译器自动为我们生成默认代码,对我们来说,有点像一个“黑匣子”,使用注解遇到任何问题,务必详细阅读官方文档(https://projectlombok.org/features/all )

一般建议尽量在简单的场景使用,达到帮助我们简化setter、getter、toString等机械性代码的目的即可

入门Demo

不使用Lombok:

使用Lombok:

1、maven依赖:

2、代码简化写法:

3、IntelliJ IDEA配置:

经过步骤1和2,代码其实已经可以编译和运行了。

但因为setter、getter、toString等代码是编译后才生成的,所以如果在编码时使用到这些代码,IDEA会提示找不到代码的错误。

所以lombok官方也配套了IntelliJ IDEA插件,安装后就不会提示错误:打开IntelliJ IDEA

找到File > Settings > Plugins

点击Browse repositories...

搜索找到Lombok插件

点击安装Lombok插件

重启IntelliJ IDEA

lombok更多特性@ToString:自动生成toString()方法

@Getter:自动生成getter方法

@Setter:自动生成setter方法

@EqualsAndHashCode:自动生成equals(Object other)和hashCode()方法

@RequiredArgsConstructor:自动生成构造函数(参数里包含所有需要处理的字段)的实现

@Data:整合了@ToString、@Getter、@Setter、@EqualsAndHashCode、@RequiredArgsConstructor的注解

lombok实现原理

Lombok其实是在编译器对代码进行了处理。

Java源码编译期间,主要包含三个阶段:语法解析和输入;注解处理;分析和生成字节码。1、语法解析和输入阶段:编译器将源文件解析为抽象语法树(AST)。如果语法无效,解析只会抛出错误。至于编译错误,例如无效的类或方法使用,则是在阶段3中检查。

2、注解处理阶段:自定义注解处理器将会被调用。注解处理器可以执行诸如验证类或生成新资源(包括源文件)之类的操作。如果由于注解处理而生成新的源文件,则编译将会循环回到语法解析和输入阶段,并重复该过程,直到不生成新的源文件。

3、分析和生成字节码阶段:编译器从阶段1中生成的抽象语法树生成类文件(字节码)。

Lombok的实现主要在阶段2进行。

基本流程为:1、定义编译期的注解

2、利用JSR269 api(Pluggable Annotation Processing API )创建编译期的注解处理器

3、利用tools.jar的javac api处理AST(抽象语法树)

4、将功能注册进jar包