Lombok-全面详解(学习总结---从入门到深化)

柔情只为你懂 2023-09-23 17:09 97阅读 0赞

目录

Lombok概述

Lombok插件安装

Lombok依赖

Lombok注解_@Setter、@Getter

Lombok注解_@ToString

Lombok注解_@EqualsAndHashCode

Lombok注解_@NonNull

Lombok注解_@NoArgsConstructor

Lombok注解_@RequiredArgsConstructor

Lombok注解_@AllArgsConstructor

Lombok注解_@Data

Lombok注解_@Builder

Lombok注解_@Log

Lombok注解_@Cleanup

Lombok注解_@SneakyThrows

Lombok概述

以前的Java项目中,充斥着太多不友好的代码:POJO的 getter/setter/toString/构造方法;打印日志;I/O流的关闭操作等 等,这些代码既没有技术含量,又影响着代码的美观,Lombok应 运而生。

LomBok可以通过注解,帮助开发人员消除JAVA中尤其是POJO类中 的冗长代码。

1、使用LomBok之前

9651ff448a024befb75bb660abce9b8e.png

2、使用LomBok之后

066c222bc00c4cd6877f7941e596085f.png

Lombok插件安装

如果IDEA版本在2020.3以上,不需要安装Lombok插件。如果IDEA 版本在2020.3以下,需要安装Lombok插件,安装方法如下:

1、点击Flie->Setting->Plugins

2、搜索Lombok,安装

44e3d8bd91c649eb852a834839a77f54.png

Lombok依赖

1、普通maven项目Lombok依赖为:

  1. <dependency>
  2. <groupId>org.projectlombok</groupId>
  3. <artifactId>lombok</artifactId>
  4. <version>1.18.22</version>
  5. <scope>provided</scope>
  6. </dependency>

2、SpringBoot项目Lombok的引入方式为:

  1. <dependency>
  2. <groupId>org.projectlombok</groupId>
  3. <artifactId>lombok</artifactId>
  4. <optional>true</optional>
  5. </dependency>

Lombok注解_@Setter、@Getter

7f4ecefa89444d5ba712e175d8591573.png

作用:为类中的属性提供setter/getter方法

位置:类上方或属性上方,在属性上方则为属性生成setter/getter 方法,在类上方表示给该类下的所有属性生成setter/getter方法

属性:设置setter和getter访问权限

  1. //给类下的所有属性添加Setter/Getter
  2. @Setter
  3. @Getter
  4. public class User {
  5. //给id属性添加Setter
  6. @Setter
  7. private Integer id;
  8. //给username的setter方法设置私有权限
  9. @Setter(AccessLevel.PRIVATE)
  10. private String username;
  11. //取消password的Getter方法
  12. @Getter(AccessLevel.NONE)
  13. private String password;
  14. private static int age;
  15. private final String address = null;
  16. }

注: 1、static修饰的变量不生成getter和setter方法

2、final修饰的变量只生成getter方法

在IDEA中,按住 Alt+7 可以查看Lombok生成的代码

Lombok注解_@ToString

6684e5bfc4d2430abecffee192d1095d.png

作用:生成toString方法,默认情况下它会按顺序打印类名称以及 每个字段。

位置:类上方

属性:

1、exclude:取消某一个或多个变量在toString方法中的显示

  1. @Setter
  2. @Getter
  3. //给User2设置一个toString方法,该方法不会显示password的值
  4. @ToString(exclude = {"password"})
  5. public class User2 {
  6. private Integer id;
  7. private String username;
  8. private String password;
  9. }

Lombok注解_@EqualsAndHashCode

a7e2e5187f37484fbc5995483ba3c0fa.png

判断两个对象是否相等

在Java中,调用equals()可以判断两个对象是否相等。如果类不重写 该方法,则判断两个引用是否指向同一个对象。

如何重写equals():

1、判断两个引用是否指向同一对象

2、判断引用是否为Null

3、判断两个对象的实际类型是否相等,此时需要调用canEqual()

4、判断两个对象的属性是否相等

而在Set中判断对象是否重复,在调用equals()之前,需要先调用 hashCode()计算hash值。所以判断对象相等需要重写equals()、 canEqual()、hashCode()三个方法。

@EqualsAndHashCode

作用:生成equals和hashCode、canEqual方法。用于比较两个类 对象是否相同。

位置:类上方

属性:

  1. 1exclude 比较时排除一些属性
  2. 2of 比较时只使用一些属性
  3. @Setter
  4. @Getter
  5. @ToString
  6. //@EqualsAndHashCode(exclude = {"password"})
  7. //排除password,只使用id,username对比及计算hash
  8. @EqualsAndHashCode(of = {"username"})
  9. //只使用username对比及计算hash
  10. public class User3 {
  11. private Integer id;
  12. private String username;
  13. private String password;
  14. }

注意:

1、对比时只使用非静态属性

2、默认仅使用该类定义的属性不比较父类定义的属性

Lombok注解_@NonNull

9b980f9e05824e188e3e251bebfe7a94.png

作用:用于方法参数前,表示调用该方法时参数不能为null;用于 属性上方,表示为该属性赋值时值不能为null。

位置:方法参数前或属性上方。

  1. @Setter
  2. @Getter
  3. public class User4 {
  4. // 调用构造方法或setter给id赋值时,值不能为null
  5. @NonNull
  6. private Integer id;
  7. private String username;
  8. private String password;
  9. // 调用sleep方法时,time参数不能为null
  10. public void sleep(@NonNull Integer time)
  11. {
  12. System.out.println("睡觉");
  13. }
  14. }
  15. // 测试
  16. @SpringBootTest
  17. public class UserTest {
  18. @Test
  19. public void testUser() {
  20. User4 user = new User4();
  21. user.setId(null);
  22. user.sleep(null);
  23. }
  24. }

Lombok注解_@NoArgsConstructor

392452e6cf4547709357410074435440.png

作用:生成无参构造方法

位置:类上方

Lombok注解_@RequiredArgsConstructor

作用:生成包含final和@NonNull修饰的属性的构造方法

位置:类上方

Lombok注解_@AllArgsConstructor

作用:生成全参的构造方法

位置:类上方

  1. @Setter
  2. @Getter
  3. //@NoArgsConstructor // 给类提供无参构造方法
  4. @RequiredArgsConstructor // 生成两个username和sex参数的构造方法
  5. @AllArgsConstructor//提供全参构造方法
  6. public class User5 {
  7. @NonNull
  8. private Integer id;
  9. private String username;
  10. private String password;
  11. private final String sex;
  12. }

Lombok注解_@Data

f0a65e9dc4c14c9e8b88be32f589a3f2.png

作用:相当于同时添加@Setter、@Getter、@ToString、 @EqualsAndHashCode、 @RequiredArgsConstructor五个注解

位置:类上方

Lombok注解_@Builder

作用:提供链式风格创建对象

位置:类上方

  1. // 同时提供@Setter、@Getter、@ToString、
  2. @EqualsAndHashCode@RequiredArgsConstructor
  3. @Data
  4. // 提供链式风格创建对象
  5. @Builder
  6. public class User6 {
  7. @NonNull
  8. private Integer id;
  9. private String username;
  10. private String password;
  11. }
  12. // 测试
  13. @Test
  14. public void testUser() {
  15. User6 user6 = User6.builder()
  16. .id(1)
  17. .username("itbaizhan")
  18. .password("itbaizhan")
  19. .build();
  20. }

Lombok注解_@Log

d2ed0c1181bd4e7b8c66f5cd9737ac1d.png

作用:在类中生成日志对象,在方法中可以直接使用

位置:类上方

  1. @Data
  2. @Log4j2
  3. public class User7 {
  4. private Integer id;
  5. private String username;
  6. private String password;
  7. public void sleep(){
  8. log.info("调用睡觉方法");
  9. System.out.println("睡觉");
  10. }
  11. }

注:针对不同的日志实现产品,有不同的日志注解,使用 @Log 表示使用Java自带的日志功能,除了 @Log ,还可以使用 @Log4j 、 @Log4j2 、 @Slf4j 等注解,来使用不同的日志产品。

Lombok注解_@Cleanup

befbb8952a934593a65bea1a5a087624.png

作用:自动关闭资源,如IO流对象。

位置:代码前方

Lombok注解_@SneakyThrows

f99bf4363c8249578e391fcc7c66feb7.png

作用:对方法中异常进行捕捉并抛出

位置:方法上方

  1. @SneakyThrows
  2. public void read() {
  3. @Cleanup FileInputStream fis = new FileInputStream("");
  4. }

发表评论

表情:
评论列表 (有 0 条评论,97人围观)

还没有评论,来说两句吧...

相关阅读