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依赖
<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日志框架时使用)
下面来看一个示例
import lombok.*; |
在这个例子中,注解*@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