大多数项目里都会有很多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包