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


    目录

    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之前

     2、使用LomBok之后

    Lombok插件安装 

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

    1、点击Flie->Setting->Plugins

    2、搜索Lombok,安装

     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

     作用:为类中的属性提供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

     作用:生成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

     判断两个对象是否相等

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

    如何重写equals():

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

    2、判断引用是否为Null

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

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

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

     @EqualsAndHashCode

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

    位置:类上方

    属性:

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

    注意:

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

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

    Lombok注解_@NonNull 

     作用:用于方法参数前,表示调用该方法时参数不能为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

     作用:生成无参构造方法

     位置:类上方

    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 

    作用:相当于同时添加@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

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

     位置:类上方

    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 

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

    位置:代码前方

    Lombok注解_@SneakyThrows 

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

    位置:方法上方

    1. @SneakyThrows
    2. public void read() {
    3. @Cleanup FileInputStream fis = new FileInputStream("");
    4. }
  • 相关阅读:
    天宇优配|北上广深角逐“国字号”数据交易所 行业爆点
    PTA 7-1 单调栈
    【Docker】搭建一键更新容器工具 - OneKey
    About 12.4 This Week
    【java】【SSM框架系列】【二】SpringMVC
    Win11系统的显卡驱动安装的详细方法步骤
    百度面试题:为什么使用接口而不是直接使用具体类?
    kubeadm重新拉取集群的方式
    linux离线源码安装Redis
    vscode结合GitHub Copilot编码
  • 原文地址:https://blog.csdn.net/m0_58719994/article/details/128128389