• 欢迎光临~

Lombok

开发技术 开发技术 2022-07-20 次浏览

Lombok

pom坐标scope为provided,因为lombok作用于编译阶段。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.16</version>
    <scope>provided</scope>
</dependency>

注解

@Getter/@Setter

作用于类和属性,自动产生 getter/setter。
注意:
AccessLevel属性设置生成方法的访问级别public/protected/private/none(不生成);
final字段只会生成get;
static静态成员变量不会生成set/get方法。

@NoArgsConstructor

@NoArgsConstructor : 生成一个没有参数的构造器

@AllArgsConstructor

@AllArgsConstructor : 生成一个包含所有参数的构造器

@RequiredArgsConstructo

@RequiredArgsConstructo :生成一个包含 “特定参数” 的构造器,特定参数指的是那些有加上 final 修饰词的变量,如果所有的变量都是正常的,都没有用 final 修饰的话,那就会生成一个没有参数的构造器

@ToString

自动重写 toString() 方法,会印出所有变量

@EqualsAndHashCode

自动生成 equals(Object other) 和 hashcode() 方法,包括所有非静态变量和非 transient 的变量,可以通过exclude排除

@NonNull

作用在方法参数或属性上,如果向参数传一个null值会抛异常。

@Data

整合包,只要加了 @Data 这个注解,等于同时加了以下注解
@Getter/@Setter
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor

@Value

也是整合包,但是他会把所有的变量都设成final的,其他的就跟 @Data 一样,等于同时加了以下注解:
@Getter (没有setter)
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor

@Builder

自动生成流式 set 值写法,从此之后再也不用写一堆 setter 了
虽然只要加上 @Builder 注解,我们就能够用流式写法快速设定对象的值,但是 setter 还是必须要写不能省略的,因为 Spring 或是其他框架有很多地方都会用到对象的 getter/setter 对他们取值/赋值 所以通常是 @Data 和 @Builder 会一起用在同个类上,既方便我们流式写代码,也方便框架做事。

@Slf4j

自动生成该类的 log 静态常量,要打日志就可以直接打,不用再手动 new log 静态常量了

原理

JSR269

JSR269: Pluggable Annotation Processing API
实现在javac编译阶段利用Annotation Processor对自定义的注解进行预处理后生成真正的JVM上面执行的“Class文件”。

Annotation Processing自定义注解是在编译阶段进行修改JDK的反射技术和JDK反射区别

Annotation Processing自定义注解是在编译阶段进行修改。
JDK的反射技术是在运行时动态修改。
结论: 反射更加灵活一些但是带来的性能损耗更大

程序员灯塔
转载请注明原文链接:Lombok
喜欢 (0)