我只取我需要关注的,或者说我要打笔记的点,灵感动机来自于刚到公司接触的项目让我初识LomBok.LomBok官方文档可以点击这里
一.LomBok是啥?
我认为lombok的主要作用有两点,1.简化代码 2.提高代码可读性
表层原因是消除千篇一律的无用代码,至于哪些代码,可以往下看.
二 .LomBok怎么用,哪里可以用?
先看怎么用再看为什么.
LomBok用到的注解👇
-
@Getter/@Setter注解的作用就是为字段添加getter/setter方法,可标注在类上,也可标注在字段上。- 标注在类上表示所有的非静态字段都会生成相应的getter/setter方法
- 标注在字段上表示只为这个字段生成,且会覆盖标注在类上的注解。
- 可设置访问级别,默认为public。
- @Setter不可以标注final字段
-
@NonNull注解标注方法和构造器的参数(用在参数前,eg:(@NonNull String id)
),如果参数为null,则会抛出空指针异常,或者用于变量上,不需要在代码中进行null检测 -
@ToString注解用于类上生成toString()方法- @ToString.Exclude 标注属性值不包含在toString()方法中
- @ToString.Include标注属性值包含在toString()方法中
@ToString.Exclude
private String age;
-
- @EqualsAndHashCode注解用于类上生成equals()和hashcode()方法,注解的属性和@ToString类似
-
用于类上生成一个无参数的构造方法,变量需要用final修饰 -
自动生成无参数构造函数。 -
自动生成全参数构造函数。 -
自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字
段添加@Setter,和@RequiredArgsConstructor,对于POJO类十分有用 -
@Value注解为不可变类型的@Data,是@Data的一个变种。只提供getter方法,而不提供setter方法.它标注的类和字段都会被声明为final -
@Builder注解为类生成builder api以供调用。Builder是一种解决包含数量巨大且繁杂的字段的类的一种构建方式。 -
@Log注解为类添加一个日志对象log,类型为java.util.logging.Logger -
@CleanUp注解用于关闭资源,调用资源的close()方法,有点逆天啊 -
自动管理资源,用在局部变量之前,在当前变量范围内即将执行完毕退出之前会自动清理资源,自动生成try-finally这样的代码来关闭流
害~上面的注解,咱也就用到了几个常用的@data @AllArgsConstructor
看了咋用的后,再看为什么
Lombok本质上就是一个实现了“JSR 269 API”的程序。在使用javac的过程中,它产生作用的具体流程如下:
- javac对源代码进行分析,生成了一棵抽象语法树(AST)
- 运行过程中调用实现了“JSR 269 API”的Lombok程序
- 此时Lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的>语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点
- javac使用修改后的抽象语法树(AST)生成字节码文件,即给class增加新的节点(代码块)
看起来有点像大学时候学的编译原理,简单说就是编译时候,响应的注解相当于一个标识,lombok程序会启动并对之前的源码种的标识进行处理生成一些支撑代码(我们之前省略的大量代码),运行的时候省略的代码相当于已经补上了,那么自然跟我们之前全部写了效果等同.
网友评论