Lombok 安装、入门 - 消除冗长的 java 代码(转)

前言:
    逛开源社区的时候无心发现的,用了一段时间,以为还能够,特此推荐一下。
    lombok 提供了简单的注解的形式来帮助咱们简化消除一些必须有但显得很臃肿的 java 代码。特别是相对于 POJO,光说不作不是个人风格,先来看看吧。

lombok 的官方网址:http://projectlombok.org/  

lombok 其实到这里我就介绍完了,开个玩笑,其实官网上有 lombok 三分四十九秒的视频讲解,里面讲的也很清楚了,并且还有文档能够参考。
在这里我就不扯太多,先来看一下 lombok 的安装,其实这个官网视频上也有讲到啦

lombok 安装
    使用 lombok 是须要安装的,若是不安装,IDE 则没法解析 lombok 注解。先在官网下载最新版本的 JAR 包,如今是 0.11.2 版本,我用的是 0.11.0
    第一次使用的时候我下载的是最新版本的,也就是我如今用的 0.11.0,到如今已经更新了两个版本,更新的好快啊 ... ...

1. 双击下载下来的 JAR 包安装 lombok
    我选择这种方式安装的时候提示没有发现任何 IDE,因此我没安装成功,我是手动安装的。若是你想以这种方式安装,请参考官网的视频。

2.eclipse / myeclipse 手动安装 lombok
    1. 将 lombok.jar 复制到 myeclipse.ini / eclipse.ini 所在的文件夹目录下
    2. 打开 eclipse.ini / myeclipse.ini,在最后面插入如下两行并保存:
        -Xbootclasspath/a:lombok.jar
        -javaagent:lombok.jar
    3.重启 eclipse / myeclipse

lombok 注解:
    lombok 提供的注解很少,能够参考官方视频的讲解和官方文档。
    Lombok 注解在线帮助文档:http://projectlombok.org/features/index.
    下面介绍几个我经常使用的 lombok 注解:
        
@Data   :注解在类上;提供类全部属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
        
@Setter:注解在属性上;为属性提供 setting 方法
        
@Getter:注解在属性上;为属性提供 getting 方法
        
@Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
        
@NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
        
@AllArgsConstructor:注解在类上;为类提供一个全参的构造方法

下面是简单示例
    1.不使用 lombok 的方案
html

 1
 2 public class Person  {
 3
 4    private String id;
 5    private String name;
 6    private String identity;
 7    private Logger log = Logger.getLogger(Person.class);
 8    
 9    public Person() {
10        
11    }
12    
13    public Person(String id, String name, String identity) {
14        this.id              = id;
15        this.name       = name;
16        this.identity  = identity;
17    }
18    
19    public String getId() {
20        return id;
21    }
22    
23    public String getName() {
24        return name;
25    }
26    
27    public String getIdentity() {
28        return identity;
29    }
30    
31    public void setId(String id) {
32        this.id = id;
33    }
34    
35    public void setName(String name) {
36        this.name = name;
37    }
38    
39    public void setIdentity(String identity) {
40        this.identity = identity;
41    }
42}
43


    2.使用 lombok 的方案
java

 1
 2 @Data
 3 @Log4j
 4 @NoArgsConstructor
 5 @AllArgsConstructor
 6 public class Person  {
 7
 8    private String id;
 9    private String name;
10  private String identity;
11    
12}
13


上面的两个 java 类,从做用上来看,它们的效果是同样的,相比较之下,很明显,使用 lombok 要简洁许多,特别是在类的属性较多的状况下,
同时也避免了修改字段名字时候忘记修改方法名所犯的低级错误。最后须要注意的是,在使用 lombok 注解的时候记得要导入 lombok.jar 包到工程


2、使用方法
使用lombok项目的方法很简单,分为四个步骤:
1)在须要自动生成getter和setter方法的类上,加上@Data注解
2)在编译类路径中加入lombok.jar包
3)使用支持lombok的编译工具编译源代码(关于支持lombok的编译工具,见“4、支持lombok的编译工具”)
4)编译获得的字节码文件中自动生成了getter和setter方法


3、原理分析
接下来进行lombok可以工做的原理分析,以Oracle的javac编译工具为例。
自从Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候获得调用。
举例来讲,如今有一个实现了"JSR 269 API"的程序A,那么使用javac编译源码的时候具体流程以下:
1)javac对源代码进行分析,生成一棵抽象语法树(AST)
2)运行过程当中调用实现了"JSR 269 API"的A程序
3)此时A程序就能够完成它本身的逻辑,包括修改第一步骤获得的抽象语法树(AST)
4)javac使用修改后的抽象语法树(AST)生成字节码文件
详细的流程图以下:



lombok本质上就是这样的一个实现了"JSR 269 API"的程序。在使用javac的过程当中,它产生做用的具体流程以下:
1)javac对源代码进行分析,生成一棵抽象语法树(AST)
2)运行过程当中调用实现了"JSR 269 API"的lombok程序
3)此时lombok就对第一步骤获得的AST进行处理,找到@Data注解所在类对应的语法树(AST),而后修改该语法树(AST),增长getter和setter方法定义的相应树节点
4)javac使用修改后的抽象语法树(AST)生成字节码文件


4、支持lombok的编译工具
1)由“3、原理分析”可知,Oracle javac直接支持lombok
2)经常使用的项目管理工具Maven所使用的java编译工具来源于配置的第三方工具,若是咱们配置这个第三方工具为Oracle javac的话,那么Maven也就直接支持lombok了
3)Intellij Idea配置的编译工具为Oracle javac的话,也就直接支持lombok了。
4)Eclipse中使用的不是Oracle javac这个编译工具,而是本身实现的Eclipse Compiler for Java (ECJ).要想使ECJ支持lombok,得进行设置,具体是在Eclipse程序目录中的eclipse.ini文件中添加以下两行设置:
-javaagent:[lombok.jar所在路径]
-Xbootclasspath/a:[lombok.jar所在路径]


5、其余问题
如今使用Intellij Idea做为Java项目的IDE,配置Oracle javac做为编译工具。
如今有一个A类,其中有一些字段,没有建立它们的setter和getter方法,使用了lombok的@Data注解,另外有一个B类,它调用了A类实例的相应字段的setter和getter方法
编译A类和B类所在的项目,并不会报错,由于最终生成的A类字节码文件中存在相应字段的setter和getter方法
可是,IDE发现B类源代码中所使用的A类实例的setter和getter方法在A类源代码中找不到定义,IDE会认为这是错误
要解决以上这个不是真正错误的错误,能够下载安装Intellij Idea中的"Lombok plugin"。


6、lombok的罪恶
使用lombok虽然可以省去手动建立setter和getter方法的麻烦,可是却大大下降了源代码文件的可读性和完整性,下降了阅读源代码的温馨度。eclipse

相关文章
相关标签/搜索