写点什么

【Spring Boot 快速入门】五、Spring Boot 集成 Lombok

作者:小阿杰
  • 2021 年 12 月 15 日
  • 本文字数:3023 字

    阅读完需:约 10 分钟

一、 Lombok 介绍

  Lombok 能以简单的注解形式来简化 java 代码,提高开发人员的开发效率。例如开发中经常需要写的 javabean,都需要花时间去添加相应的 getter/setter,也许还要去写构造器、equals 等方法,而且需要维护,当属性多时会出现大量的 getter/setter 方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误。


  Lombok 能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString 方法。出现的神奇就是在源码中没有 getter 和 setter 方法,但是在编译生成的字节码文件中有 getter 和 setter 方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁些。


  Lombok 的使用跟引用 jar 包一样,可以在官网(https://projectlombok.org/download)下载 jar 包,也可以使用 maven 添加依赖:


<!-- lombok 依赖-->        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <version>1.16.10</version>            <scope>provided</scope>        </dependency>
复制代码

二、常用注解

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


import lombok.AccessLevel;import lombok.Setter;import lombok.Data;import lombok.ToString;
@Data public class DataExample { private final String name; @Setter(AccessLevel.PACKAGE) private int age; private double score; private String[] tags; @ToString(includeFieldNames=true) @Data(staticConstructor="of") public static class Exercise<T> { private final String name; private final T value; }}
复制代码


  • @Getter/@Setter 如果觉得 @Data 太过残暴(因为 @Data 集合了 @ToString、@EqualsAndHashCode、@Getter/@Setter、@RequiredArgsConstructor 的所有特性)不够精细,可以使用 @Getter/@Setter 注解,此注解在属性上,可以为相应的属性自动生成 Getter/Setter 方法。


import lombok.AccessLevel;import lombok.Getter;import lombok.Setter;
public class GetterSetterExample {
@Getter @Setter private int age = 10; @Setter(AccessLevel.PROTECTED) private String name; @Override public String toString() { return String.format("%s (age: %d)", name, age); }}
复制代码


  • @NonNull 该注解用在属性或构造器上,Lombok 会生成一个非空的声明,可用于校验参数,能帮助避免空指针。


import lombok.NonNull;
public class NonNullExample extends Something { private String name; public NonNullExample(@NonNull Person person) { super("Hello"); this.name = person.getName(); }}
复制代码


  • @Cleanup 该注解能帮助我们自动调用 close()方法,很大的简化了代码。


import lombok.Cleanup;import java.io.*;
public class CleanupExample { public static void main(String[] args) throws IOException { @Cleanup InputStream in = new FileInputStream(args[0]); @Cleanup OutputStream out = new FileOutputStream(args[1]); byte[] b = new byte[10000]; while (true) { int r = in.read(b); if (r == -1) break; out.write(b, 0, r); } }}
复制代码


  • @EqualsAndHashCode 默认情况下,会使用所有非静态(non-static)和非瞬态(non-transient)属性来生成 equals 和 hasCode,也能通过 exclude 注解来排除一些属性。


import lombok.EqualsAndHashCode;
@EqualsAndHashCodepublic class EqualsAndHashCodeExample { private transient int transientVar = 10; private String name; private double score; @EqualsAndHashCode.Exclude private Shape shape = new Square(5, 10); private String[] tags; @EqualsAndHashCode.Exclude private int id; public String getName() { return this.name; } @EqualsAndHashCode(callSuper=true) public static class Square extends Shape { private final int width, height; public Square(int width, int height) { this.width = width; this.height = height; } }}
复制代码


  • @ToString 类使用 @ToString 注解,Lombok 会生成一个 toString()方法,默认情况下,会输出类名、所有属性(会按照属性定义顺序),用逗号来分割。通过将 includeFieldNames 参数设为 true,就能明确的输出 toString()属性。这一点是不是有点绕口,通过代码来看会更清晰些。


import lombok.ToString;
@ToStringpublic class ToStringExample { private static final int STATIC_VAR = 10; private String name; private Shape shape = new Square(5, 10); private String[] tags; @ToString.Exclude private int id; public String getName() { return this.name; } @ToString(callSuper=true, includeFieldNames=true) public static class Square extends Shape { private final int width, height; public Square(int width, int height) { this.width = width; this.height = height; } }}
复制代码


  • @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor 无参构造器、部分参数构造器、全参构造器。Lombok 没法实现多种参数构造器的重载。


import lombok.AccessLevel;import lombok.RequiredArgsConstructor;import lombok.AllArgsConstructor;import lombok.NonNull;
@RequiredArgsConstructor(staticName = "of")@AllArgsConstructor(access = AccessLevel.PROTECTED)public class ConstructorExample<T> { private int x, y; @NonNull private T description; @NoArgsConstructor public static class NoArgsExample { @NonNull private String field; }}
复制代码

三、优缺点

优点:

1、能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString 等方法,提高了一定的开发效率。


2、让代码变得简洁,不用过多的去关注相应的方法。


3、属性做修改时,也简化了维护为这些属性所生成的 getter/setter 方法等。

缺点:

1、不支持多种参数构造器的重载。


2、虽然省去了手动创建 getter/setter 方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度。

四、官方文档

  阅读更多官方文档信息,请点击Lombok介绍。感谢各位阅读。

五、Lombok 安装

设置

  选择 file 目录点击 settings。



  选择 plugins,搜索 lombok。



选择安装即可。

添加依赖

      <!-- lombok start -->        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <version>1.16.18</version>            <scope>provided</scope>        </dependency>        <!-- lombok end -->
复制代码


更多快速入门参考:【快速开发】Lombok 快速入门

结语

  这样 Lombok 与 Spring Boot 集成成功啦。更多的测试大家可以深入研究一下 Lombok 相关信息,相信一定会有新大陆发现的。


  好了,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。

发布于: 2021 年 12 月 15 日阅读数: 18
用户头像

小阿杰

关注

一个爱鼓捣的程序猿,JAVA开发者和爱好者。 2020.10.24 加入

一个爱鼓捣的程序猿,JAVA开发者和爱好者。 分享生活工作中所见、所闻、所学、所用,愿不断成长。公众号【Java全栈架构师】维护者。 自建微信小程序【软考真题解析】【实用在线工具箱】,欢迎阅读交流。

评论

发布
暂无评论
【Spring Boot 快速入门】五、Spring Boot集成Lombok