Springboot使用Lombok库

为什么使用Lombok库?

        在 Java 中使用 Lombok 库主要是为了简化代码,特别是那些冗长且重复的 getter、setter、equals、hashCode 和 toString 等方法的编写。Lombok 通过在编译时自动插入这些方法,使得代码更加简洁和易读。

怎么使用Lombok库?

1.添加 Lombok 依赖

maven:在 pom.xml 文件中添加 Lombok 的依赖。

<dependencies>  
    <!-- 其他依赖 ... -->  
    <dependency>  
        <groupId>org.projectlombok</groupId>  
        <artifactId>lombok</artifactId>  
        <version>1.18.22</version> <!-- 请检查并使用最新版本 -->  
        <scope>provided</scope>  
    </dependency>  
</dependencies>

grade:在 build.gradle 文件中添加 Lombok 的依赖和注解处理器。

dependencies {  
    // 其他依赖 ...  
    implementation 'org.projectlombok:lombok:1.18.22' // 请检查并使用最新版本  
    annotationProcessor 'org.projectlombok:lombok:1.18.22'  
}

2.在 IDE 中安装 Lombok 插件

Lombok插件在 IDEA 2020.3 版本中成为了官方内置插件,开发者无需再进行Lombok插件的安装操作了。 如果如果的IDEA版本低于 2020.3 ,可以自己手动在IDEA上进行Lombok插件的安装

  • 对于 IntelliJ IDEA,请通过 File -> Settings -> Plugins -> Marketplace 搜索 Lombok 并安装插件。

  • 安装插件后,重启 IDE 以确保插件生效。

在 Java 类中使用 Lombok 注解: 

一些常用的 Lombok 注解: 
1.@Getter 和 @Setter
  • 作用:这两个注解分别用于自动生成字段的 getter 和 setter 方法。
  • 使用
    • @Getter:标注在类上,为该类所有非静态字段生成 getter 方法;标注在字段上,只为该字段生成 getter 方法。
    • @Setter:与 @Getter 类似,但是生成的是 setter 方法。对于被 final 修饰的字段,不会生成 setter 方法。
import lombok.Getter;  
import lombok.Setter;  
  
@Getter  
@Setter  
public class User {  
    private String name;  
    private int age;  
}  
  
// 相当于自动生成的getter和setter方法  
// public String getName() { ... }  
// public void setName(String name) { ... }  
// public int getAge() { ... }  
// public void setAge(int age) { ... }
2.@ToString
  • 作用:自动生成 toString() 方法,用于返回对象的字符串表示。
  • 使用:标注在类上,Lombok 会自动根据类的字段生成 toString() 方法。
import lombok.ToString;  
  
@ToString  
public class User {  
    private String name;  
    private int age;  
}  
  
// 相当于自动生成的toString方法  
// public String toString() {  
//     return "User(name=" + this.name + ", age=" + this.age + ")";  
// }
3.@EqualsAndHashCode
  • 作用:自动生成 equals(Object other) 和 hashCode() 方法。
  • 使用:标注在类上,Lombok 会自动根据类的非静态、非 transient 字段生成这两个方法。
  • 注意:如果类继承自其他类,并且父类已经实现了 equals() 和 hashCode() 方法,那么子类在生成这两个方法时,通常会考虑父类的字段。但 Lombok 默认不会这样做,你需要通过 callSuper 参数来指定是否要包含父类的字段。
import lombok.EqualsAndHashCode;  
  
@EqualsAndHashCode  
public class User {  
    private String name;  
    private int age;  
}  
  
// 相当于自动生成的equals和hashCode方法  
// 这两个方法会比较name和age字段来确定两个User对象是否相等,以及计算hashCode值
4.@Data

  • 作用:这是一个组合注解,包含了 @ToString@EqualsAndHashCode@Getter(对于非静态字段)和 @Setter(对于非 final 字段,除非标记为只读)的功能。
  • 使用:标注在类上,Lombok 会自动为该类生成上述所有方法。
import lombok.Data;  
  
@Data  
public class User {  
    private String name;  
    private int age;  
}  
  
// @Data相当于同时使用了@ToString、@EqualsAndHashCode、@Getter(非静态字段)和@Setter(非final字段,除非只读)
5.@NoArgsConstructor@AllArgsConstructor 和 @RequiredArgsConstructor

  • 作用:用于自动生成构造函数。
  • 使用
    • @NoArgsConstructor:生成一个无参构造函数。
    • @AllArgsConstructor:生成一个包含所有字段的构造函数。
    • @RequiredArgsConstructor:生成一个包含被 @NonNullfinal 或 @RequiredArgsConstructor 注解标记的字段的构造函数。
import lombok.AllArgsConstructor;  
import lombok.NoArgsConstructor;  
import lombok.RequiredArgsConstructor;  
  
@NoArgsConstructor // 生成无参构造方法  
@AllArgsConstructor // 生成包含所有字段的构造方法  
@RequiredArgsConstructor(staticName = "of") // 生成包含final字段和@NonNull注解字段的构造方法,并提供一个静态工厂方法名为of  
public class User {  
    private final String name;  
    @NonNull private int age;  
    private String address;  
}
6.@Builder
  • 作用:为类生成构建器模式的代码。
  • 使用:标注在类上,Lombok 会自动生成一个静态内部类 Builder,用于构建该类的对象。通过构建器,你可以以链式调用的方式设置对象的字段值,并最后通过调用 build() 方法来创建对象。
import lombok.Builder;  
  
@Builder  
public class User {  
    private String name;  
    private int age;  
      
    // Lombok会生成一个静态内部类Builder,并提供链式调用设置字段值的方法,最后通过build()方法创建User对象  
}  
  
// 使用方式  
User user = User.builder().name("John").age(30).build();
7.@Value

  • 作用:用于创建不可变对象(字段都是 final 的)。
  • 使用:标注在类上,Lombok 会自动生成所有字段的 getter 方法(但不包括 setter 方法,因为字段都是 final 的),以及 equals()hashCode() 和 toString() 方法。
import lombok.Value;  
  
@Value  
public class User {  
    String name;  
    int age;  
      
    // 字段都是final的,自动生成getter方法,但不生成setter方法  
    // 自动生成equals、hashCode和toString方法  
}
8.@Log@Slf4j
  • 作用:自动生成日志相关的字段和方法。
  • 使用:这些注解用于在类中自动添加日志功能。例如,@Slf4j 会生成一个名为 log 的 SLF4J 日志对象。
import lombok.extern.slf4j.Slf4j;  
  
@Slf4j  
public class TestService {  
    public void testValid() {  
        log.info("This is an info message.");  
    }  
}  
  
// Lombok会自动生成一个名为log的SLF4J日志对象

使用 Lombok 库可以极大地简化 Java 代码,特别是在处理常见的样板代码(如 getter、setter、equals、hashCode、toString 等方法)时。Lombok 通过注解的方式,在编译时自动生成这些代码,从而使得源代码更加简洁和清晰。以下是使用 Lombok 的一些总结和注意事项:

优点

  1. 代码简洁:通过注解,可以省略大量的样板代码,使代码更加简洁易读。

  2. 减少错误:自动生成的方法通常比手动编写的方法更可靠,减少了出错的可能性。

  3. 提高开发效率:减少了编写和测试样板代码的时间,使开发者能够更专注于业务逻辑的实现。

  4. 支持多种日志框架:如 @Slf4j@Log4j2 等,可以方便地集成日志功能。

  5. 支持构建器模式@Builder 注解可以自动生成构建器,使对象的创建更加灵活。

注意事项

  1. 可读性:虽然 Lombok 可以减少代码量,但也可能降低代码的可读性。特别是对于一些不熟悉 Lombok 的开发者来说,他们可能需要花费额外的时间来理解代码是如何工作的。

  2. IDE 支持:Lombok 需要 IDE 插件的支持才能正常工作。如果没有正确安装和配置插件,可能会导致 IDE 无法正确识别 Lombok 注解生成的代码。

  3. 版本兼容性:Lombok 的版本可能与 Java 或其他库的版本不兼容。在升级或降级 Lombok 时,需要确保与其他依赖项的版本兼容。

  4. 反编译问题:由于 Lombok 是在编译时生成代码的,因此在反编译生成的字节码时,可能无法看到 Lombok 注解生成的代码。这可能会给调试和代码审查带来一些困难。

  5. 避免过度使用:虽然 Lombok 可以简化代码,但过度使用可能会导致代码结构变得复杂和难以理解。因此,在使用 Lombok 时,需要权衡其优缺点,并谨慎选择是否使用某个注解。

总结

Lombok 是一个强大的工具,可以极大地简化 Java 代码。然而,在使用 Lombok 时,需要注意其可能带来的问题,并谨慎选择是否使用某个注解。对于团队项目来说,需要确保所有成员都熟悉 Lombok 的使用方法和注意事项,以避免因误解或误用而导致的问题。

  • 32
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值