前言
前几天有个新来的同事(实习生)惊讶的对我说:我们的代码里好多错误,我的程序本地都启动不了。
我一脸懵逼的质问他:目前线上的代码,怎么会有问题吗?
他不服气的说:你来看嘛,就是有问题,Dao实体get()和set()方法都没有。
此处省略10000字,让我流一会儿技术人的眼泪。
Lombok
通常我们代码里的实体Dao或者自定义Bean都会有get()和set()方法,set是设置的意思,而get是获取的意思,顾名思义,这两个方法是对数据进行设置和获取用的。一般来说set和get方法都是对私有域变量进行操作的,所以大多数都是使用在包含特定属性的类实体中。
现实中有说许多看到密密麻麻的get()和set()就会头疼,但现在有了Lombok,它提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码。通过使用对应的注解,可以在编译源码的时候生成对应的方法,所以不会影响任何运行效率。
但也许有的人由于习惯问题,看不到get()和set()也会缺乏一些安全感。
传统set和get方法
既然是实体,里面少不了要定义变量,而实体变量的值的设置和获取,由set()和get()方法实现。标准set和get方法定义如下:
public class MedalinfoVo {private Long id;private String medalname;private String icon;private Integer isLight;private Integer medallevel;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getMedalname() {return medalname;}public void setMedalname(String medalname) {this.medalname = medalname;}public String getIcon() {return icon;}public void setIcon(String icon) {this.icon = icon;}public Integer getIsLight() {return isLight;}public void setIsLight(Integer isLight) {this.isLight = isLight;}public Integer getMedallevel() {return medallevel;}public void setMedallevel(Integer medallevel) {this.medallevel = medallevel;}}
方法setXxx()参数为该变量的值,即我们在给该变量定义值的时候设置的。
方法getXxx()无参,直接返回该变量的在主内存的值。
可以看到满篇的set和get方法,如果一个实体有20个变量或以上,那么整个class看起来就会非常长而且臃肿,既没有技术含量,又影响着代码的美观,要增加或修改的时候变得麻烦和易错。
重要的是set和get方法,也存在线程同步问题。
Lombok的set和get方法
Lombok是一种自动接通你的编辑器和构建工具的一个Java库。lombok其实就是帮助我们编写getter或者equals方法的一个“工具”。官方网站:Lombok官网
lombok的使用
首先引入maven依赖:
使用了lombok的实体
@Getter@Setterpublic class MedalinfoVo {private Long id;private String medalname;private String icon;private Integer isLight;private Integer medallevel;}
看到没有,使用了lombok的实体,变得非常简洁和美观,而且执行起来效率变得非常快,这是因为lombok库直接调用了java源码类库而实现,具体可以详看lombok源码实现。
lombok实现原理
Lombok的基本流程应该基本是这样:
定义编译期的注解利用JSR269 api(Pluggable Annotation Processing API )创建编译期的注解处理器利用tools.jar的javac api处理AST(抽象语法树)将功能注册进jar包
只是通过简单的@Getter @Setter 注解便可以实现变量的set和get方法,除此外还有@ToString、@NoArgsConstructor (构造函数)等,诸多注解供你使用,为你节省大量宝贵时间和代码提高开发效率。