美文网首页
Lombok原理

Lombok原理

作者: 伊凡的一天 | 来源:发表于2017-12-25 19:49 被阅读571次

    Lombok是一款通过注解在Java编译期生成代码的工具,通过使用其内置的一些注解如@Getter, @Setter等,可以在编译期间生成getter,setter,构造器,builder等代码,效果如下:

Lombok注解 Lombok效果

    如图,通过@Data注解,lombok为MatchingCriteria类生成了Getter,Setter,hashcode,equals等方法;通过@AllArgsConstructor注解为MatchingCriteria类生成了全参构造器,@NoArgsConstructor注解为MatchingCriteria类生成了无参构造器。

1. Lombok原理

    Lombok通过添加注解的方式来生成代码,在Jdk1.5引入注解的同时,也引入了两种解析注解的方式:1. 运行时通过反射解析 2. 编译时期解析

1.1 运行时解析注解

    运行时能够解析的注解,必须将@Retention设置为RUNTIME,这样可以通过反射获得该注解。以下是常用的解析注解的api:

boolean isAnnotationPresent(Class annotationClass);                                                         T getAnnotation(Class annotationClass);                                                               Annotation[] getAnnotations(); 

1.2 编译时解析注解

    编译时解析注解主要有两种方式:Annotation Processing Tool以及Pluggable Annotation Processing API。

1.2.1 Annotation Processing Tool

    APT来自JDK5, JDK7中不推荐使用,JDK8中已经彻底删除了。从JDK1.6以后,可以使用Pluggable Annotation Processing API来代替它。APT被废弃的主要原因如下:

1. APT集成在com.sun.mirror非标准包下

2. 没有集成到javac中,需要额外运行

1.2.2 Pluggable Annotation Processing API

    JSR 269在JDK6中被引入,作为APT的替代方案。javac执行的时候会调用Pluggable Annotation Processing API,因此我们可以通过实现此API来改变编译期的一些行为从而达到目的。具体的编译流程如下:

javac编译流程

举例来说,现在有一个实现了Pluggable Annotation Processing API的程序A,那么使用javac编译时的具体流程如下:

1. javac编译器对源码进行分析,生成一个抽象的语法树(AST)

2. javac编译器运行A程序

3. A程序完成逻辑,一般是修改此语法树

4. javac使用修改后的语法树生成可执行的字节码文件

Lomok便是通过Pluggable Annotation Processing API来实现代码生成的。

参考:Lombok原理解析 Lombok使用与原理

相关文章

网友评论

      本文标题:Lombok原理

      本文链接:https://www.haomeiwen.com/subject/fdqrgxtx.html