Lombok:再也不写set和get方法了

简介

Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString;异常处理;I/O流的关闭操作等等,这些样板代码既没有技术含量,又影响着代码的美观,Lombok应运而生。

应用

第一步: 安装插件,重启IDEA

1.进入Settings设置界面,安装Lombok插件(重启IDEA)
2.Settings设置界面,开启 AnnocationProcessors(让Lombok注解在编译阶段起到作用)

第二步: 引用Jar包

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.18</version>
    <scope>provided</scope>//只在编译阶段生效,不需要打入包中
</dependency>

原理

从Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候得到调用。
Lombok就是一个实现了"JSR 269 API"的程序。

流程

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

2. javac编译过程中调用实现了JSR 269的Lombok程序

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

4. javac使用修改后的抽象语法树(AST)生成字节码文件

常用注解

@Data
所有属性的get和set方法
toString 方法
hashCode方法
equals方法

@Getter
@Setter
作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的getter/setter方法,可以设定访问权限及是否懒加载等。

@EqualsAndHashCode:作用于类覆盖默认的equals和hashCode方法

@NonNull:主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常。

@NoArgsConstructor:生成无参构造器

@AllArgsConstructor:生成全参构造器

@RequiredArgsConstructor:生成包含final和@NonNull注解的成员变量的构造器;

@ToString(of={"name","phone"},exclude={"age"})
作用于类,覆盖默认的toString()方法,可以通过of属性限定显示某些字段,通过exclude属性排除某些字段。

@Builder:作用于类上,将类转变为建造者模式

@Log:作用于类上,生成日志变量。针对不同的日志实现产品,有不同的注解

案例

@Data
@NoArgsConstructor(staticName = "of",access = AccessLevel.PRIVATE)
@AllArgsConstructor
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
@Setter(value = AccessLevel.PUBLIC)
@Getter(value = AccessLevel.PUBLIC)

public class User {
    @NonNull
    private Long id;//用户表

    private Long roleId;//角色id

    private String userName;//账号

    private String passWord;//密码
}

如有疑问或不同见解,欢迎留言共同交流,博主看到后会在第一时间回复哦…

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mrhs_dhls/article/details/106057758