背景
最近因为项目使用到了lombok,然后自己做了一个PPT。总结了一部分知识。现在将PPT的内容抽取出来作为一篇博客。
基本介绍
Lombok可以减少JOPO对象的一些代码编写。如下面的对象,这种get和set方法主要是面向对象为了封装。但是其实也没做什么特别的事情。这种代码其实可以简洁一点。
使用Lombok后代码就会如下:
这样代码看起来就简洁了很多了。而且Lombok的功能还是比较强大的。有挺多的注解给我们使用,来帮助我们减少一些代码的编写。
常用的注解如下:
@Getter
@Setter
@ToString
@NotNull
@Data
@EqualAndHashCode
@NoArgsConstructor
@AllArgsConstructor
高级注解如下:
@CleanUp
@Synchronized
@SneakyThrows
@Log
@Slf4j
等效代码
@CleanUp
public void testCleanUp(){
try{
@CleanUp ByteArrayOutputStream baos =new ByteArrayOutputStream();
System.out.println(baos.toString());
}
}
等同于
public void testCleanUp(){
try{
// 代码
}finally{
baos.close();
}
}
@CleanUp 对自动添加上对流的关闭操作
原理
自从Java6起,Javac就支持了”JSR 269 Pluggable Annotation Processing” API 规范,只要
程序实现了该API,就能在Javac运行的时候得到调用
1.Javac对源代码进行分析,生成一颗抽象语法树(AST)
2.运行过程中调用实现了”JSR 269 API”的 某 程序
3.此时某程序就可以完成自己的逻辑,包括修改第一步骤得到的抽象语法树
4.Javac使用修改后的抽象语法树(AST)生成字节码文件
总结
Lombok的原理很简单,就是在java编译器build的时候,lombok的解析器会去扫描代码,找出添加过注解的代码然后修改抽象语法树,然后剩下的事情由编译器继续做。所以我们的代码,在编译后在class文件里面就已经可以看到lombok给我们动态添加的代码了。
参考链接
Lombok 官网:https://www.projectlombok.org/
lombok介绍:https://yq.aliyun.com/articles/59972
https://www.cnblogs.com/tabCtrlShift/p/9076559.html
https://www.e-learn.cn/content/java/1007833