# POJO搬到龙目岛——Lombok
# Lombok介绍(官网)
一句话概括:通过简单注解来精简代码达到消除冗长代码的目的。
# Lombok优点
提高编码效率、使代码简洁、消除冗长代码、避免修改字段名字时忘记修改方法名、提高逼格、Lombok本身支持了日志框架(我们省去了对log的声明)
# Lombok缺点
IDE上必须要支持Lombok,否则IDE会报错!
# Lombok原理
JSR 269 Pluggable Annotation Processing API
javac从Java6开始支持“JSR 269 API”规范
只要程序实现了该API,就能在javac运行时得到调用
Lombok实现了“JSR 269 API”,在编译时,javac编译源码的具体流程如下:
Source File->Parse->AST->Lombok Annotation Processor->|
| |
| |
|<-—————————————————————————————<—|
Lombok Annotation Handler—>Modified AST—>Aanlyze and Generate->Byte Code
1
2
3
4
5
2
3
4
5
源码经过javac分析过程生成一棵抽象语法树,运行过程中调用实现了“JSR 269 API”规范的Lombok程序,然后处理器对刚刚生成的语法树AST进行处理,例如@Data会自动生成变量的getter、setter方法。Lombok Annotation Handler就负责找到对应的语法树,然后修改该语法树,输出一个修改过的语法树,那它修改了什么呢,例如上面例子中增加了对应变量的getter、setter方法相应的树节点,拿到修改后的抽象语法树进行解析和生成,这个时候就生成了字节码文件。
# Lombok引入项目
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
<!-- scope说明了引用Lombok的范围,声明provided说明在编译时不会打进war包当中 -->
</dependency>
</dependencies>
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# IDEA安装Lombok插件
File->Settings->Plugins->Browse Repositories->搜索 Lombok plugin->Install->Restart IDEA
# Lombok实战
@Data //加在类上(包含@Getter、@Setter、@ToString、@EqualsAndHashCode,没有无参和全参构造,并且默认所有字段)
@Getter //自动生成getter方法
@Getter(AccessLevel.PROTECTED) //权限受保护,如果不需要加权限(public)直接@Data注解就可以
@Setter //自动生成setter方法
@Setter(AccessLevel.PROTECTED) //权限受保护,如果不需要加权限(public)直接@Data注解就可以
@NoArgsConstructor //无参构造器
@AllArgsConstructor //全参构造器
@ToString //把这个类声明的所有属性都进行ToString(重写ToString)
@ToString(exclude = "column") //排除掉不想ToString的属性
@ToString(of = "column") //ToString方法只有column指定的字段
@EqualsAndHashCode //重写Equals、HashCode方法,它有默认的规则
@EqualsAndHashCode(exclude = "column") //排除掉不加入重写Equals、HashCode的
@Slf4j //logback日志框架使用
@Log4j //log4j日志框架使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# Lombok使用须知
在类需要序列化、反序列化时详细控制字段时(例如:Jackson json序列化),要考虑是否适用;
虽然提高了开发效率,省去了手动创建getter、setter,但是降低了源代码文件的可读性和完整性,降低了阅读源代码的舒适度;
选择适合的地方使用Lombok,例如POJO。