Lombok是一个工具,通过它可以使用简单注解来精简代码达到消除冗余代码的目的。
Lombok的优点
- 提高编码效率
- 使代码更简洁
- 消除冗长代码
- 避免修改字段名字时忘记修改方法名
当然,要使用该工具必须要IDE支持才行。
Lombok原理
Lombok支持了JSR 269 Pluggable Annotation Processing API,javac从Java6开始支持“JSR 269 API”规范,只要程序实现了该API,就能在javac运行的时候得到调用。
Lombok实现了“JSR 269 API”,在编译时,javac编译代码的具体流程如下
- 首先,javac通过分析java源代码,生成抽象语法树(AST)
- 然后,javac会调用实现了“JSR 269”的Lombok注解处理器(Lombok Annotation Processor),该处理器会使用Lombok Annotation Handler修改使用了Lombok注解的类相对应的抽象语法树(AST)
- 最后,javac对修改后的抽象语法树(Modified AST)进行分析,然后生成(Analyze and Generate)字节码文(Byte Code)
使用Lombok
本篇使用的IDE为IDEA,为了在项目中使用Lombok,需要做以下准备
引入Lombok依赖
12345<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</version></dependency>IDE安装Lombok插件
1)为了安装该插件,点击菜单File->Settings…,弹出Settings界面,选择Plugins选项
2) 选择右侧的Browse repositories按钮,在弹出的界面中搜索Lombok,点击Install,然后重启IDE即可- 添加注解
| 注解 | 作用 |
| :—————–: | :———————————————————-: |
| @Data | @Data注解包含了@Getter、@Setter、@EqualsAndHashCode、@ToString,同时还增加了protected的canEqual方法 |
| @Getter | |
| @Setter | |
| @NoArgsConstructor | 无参构造器 |
| @AllArgsConstructor | 所有参数的构造器 |
| @ToString | 可以包含exclude属性排除某字段,of只要某些字段 |
| @EqualsAndHashCode | 可以包含exclude属性排除某字段,of只要某些字段 |
| @Slf4j | 可以直接使用log对象相关方法打印日志(项目使用logback日志框架时使用) |
| @Log4j | 可以直接使用log对象相关方法打印日志 (项目使用log4j日志框架时使用) |
下面来看一个示例
|
|
在这个例子中,注解@Getter,@Setter分别用于生成Pojo字段的getter和setter方法,@NoArgsConstructor用于生成无参构造器,@AllArgsConstructor用于生成包含全部参数的构造器,而@EqualsAndHashCode(of=”id”)则用于生成该Pojo的equals和hashCode方法,of属性指定了在这两个方法中,只使用字段id,当id相同时,则表示两实例是同一个。
使用Lombok时的注意事项
尽管Lombok如此好用,但是还是要注意正确使用Lombok,下面是使用过程中的一些注意事项
- 在类需要序列化、反序列化详细控制字段时慎用
- 使用Lombok虽然能够省去手动创建Getter和Setterf方法等繁琐,但是降低了源代码文件的可读性和完整性,降低了阅读源代码的舒适度
- 使用@Slf4j还是@Log4j看项目使用的日志框架
- 在适当的地方使用Lombok,例如POJO