lombok

2019-05-13  本文已影响0人  升空的焰火

一.简介

非常牛逼的优化代码pojo编写神器。仅仅通过注解就能实现多模板化代码的省略编写。

不过恶心的是,它是个插件,不仅仅是jar包引入,需要安装插件才能玩。

为什么呢?因为它是编译期解析,然后通过插件程序改class文件,把省略的部分补上去。

Lombok本质上就是一个实现了“JSR 269 API”的程序。在使用javac的过程中,它产生作用的具体流程如下:

javac对源代码进行分析,生成了一棵抽象语法树(AST)

运行过程中调用实现了“JSR 269 API”的Lombok程序

此时Lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点

javac使用修改后的抽象语法树(AST)生成字节码文件,即给class增加新的节点(代码块)

有点恶心呀!


二.使用

1.@Data

@Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。

用了就基本只用关注属性就好了,不过可能很多东西大家用不上,多了编译会慢哟。

2.@Getter/@Setter

注解后不用写属性的get,set。超级方便,以后看一个pojo,再也不用看那么多模板代码了。

3.@NonNull

顾明思议,为空校验,用spring的就好,这个看看就行。

4.@Cleanup

不用关心流的关闭了,写那么多try catch 。直接在声明流变量的时候调用,发明。

5.@EqualsAndHashCode,@Equals,@hashcode

懒得重写对象的equals,hashcode方法,直接用,完美。

6.@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor

无参构造器、部分参数构造器、全参构造器。Lombok没法实现多种参数构造器的重载。

7.@Delegate

代理模式

正如我们所知的,在程序中调用rest接口是一个常见的行为动作,如果你和我一样使用过spring 的RestTemplate,我相信你会我和一样,对他抛出的非http状态码异常深恶痛绝。

所以我们考虑将RestTemplate最为底层包装器进行包装器模式的设计:

@DelegateprotectedvolatileRestTemplate restTemplate;

自动重写restTemplate所有方法。

8.@Accessors(chain =true)

链式编程的美。

Student student =newStudent() .setAge(24) .setName("zs");


9.@Builder

工厂式创建对象,贼爽。

Student student = Student.builder().name("zs").age(24).build();


终于写完了,关键项目用不用。

上一篇下一篇

猜你喜欢

热点阅读