Spring Boot 之 Lombok 使用详解

Lombok 是一个 Java 库,它通过注解自动生成样板代码,例如 getter、setter、构造函数、equals()、hashCode() 等,从而减少代码冗余,提高开发效率。在 Spring Boot 项目中使用 Lombok 可以使代码更加简洁易读。

本文将详细介绍 Lombok 在 Spring Boot 中的使用。

1. 添加 Lombok 依赖:

在你的pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

optional设置为true表示该依赖是可选的,不会传递到依赖项目中,避免冲突。

2. 安装 Lombok 插件 (IDE 支持):

为了使 IDE 能够正确识别 Lombok 生成的代码,需要安装 Lombok 插件。以 IntelliJ IDEA 为例,可以在Settings/Preferences -> Plugins中搜索 "Lombok" 并安装。(图标是一个红色的辣椒)安装后记得重启IDEA生效!

3. 常用注解:

Lombok 提供了丰富的注解,以下是一些常用的注解及其使用方法:

  • **@Data:**这是一个组合注解,相当于@Getter,@Setter,@ToString,@EqualsAndHashCode,@RequiredArgsConstructor的组合。它会生成所有字段的 getter 和 setter 方法,toString()、equals() 和 hashCode() 方法,以及一个包含 final 字段和非空字段的构造函数。

    import lombok.Data;
    
    @Data
    public class User {
        private Long id;
        private String name;
        private String email;
    }
    
  • **@Getter和@Setter:**分别生成 getter 和 setter 方法。可以作用于类或字段。

    import lombok.Getter;
    import lombok.Setter;
    
    public class Product {
        @Getter @Setter
        private Long id;
    
        @Getter
        private String name;
    
        @Setter
        private double price;
    }
    
  • **@ToString:**生成 toString() 方法,可以自定义输出格式。

    import lombok.ToString;
    
    @ToString(exclude = {"password"}) // 排除 password 字段
    public class User {
        private String username;
        private String password;
        private String email;
    }
    
  • **@EqualsAndHashCode:**生成 equals() 和 hashCode() 方法。可以指定参与比较的字段。

    import lombok.EqualsAndHashCode;
    
    @EqualsAndHashCode(of = {"id", "name"}) // 只比较 id 和 name 字段
    public class Product {
        private Long id;
        private String name;
        private double price;
    }
    
  • **@NoArgsConstructor:**生成无参构造函数。

    import lombok.NoArgsConstructor;
    
    @NoArgsConstructor
    public class Order {
        private Long id;
        private String orderNumber;
    }
    
  • **@AllArgsConstructor:**生成包含所有字段的构造函数。

    import lombok.AllArgsConstructor;
    
    @AllArgsConstructor
    public class Item {
        private Long id;
        private String name;
        private int quantity;
    }
    
  • **@Builder:**生成 builder 模式代码,方便创建对象。这个还是比较好用的

    import lombok.Builder;
    
    @Builder
    public class Address {
        private String street;
        private String city;
        private String zipCode;
    
        public static void main(String[] args) {
            Address address = Address.builder()
                    .street("123 Main St")
                    .city("Anytown")
                    .zipCode("12345")
                    .build();
    
            System.out.println(address);
        }
    }
    
  • **@Slf4j:**生成一个名为 log 的日志对象,可以直接使用 log.info() 等方法输出日志。 (需要添加 slf4j 依赖)

    import lombok.extern.slf4j.Slf4j;

    @Slf4j

    public class LogExample {

    public static void main(String[] args) {

    log.info("Hello, Lombok!");

    }

    }

4. 在 Spring Boot 中使用 Lombok:

在实体类、控制器、服务等组件中都可以使用 Lombok 注解。

示例:创建一个 User 实体类:

import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
}

5. 总结:

Lombok 可以显著减少样板代码,提高开发效率。通过使用 Lombok 注解,可以使代码更加简洁易读,并减少出错的可能性。

额外提示:

  • 可以根据需要组合使用不同的 Lombok 注解。

  • 可以使用@Accessors注解自定义 getter 和 setter 方法的命名方式。

  • 可以使用@SneakyThrows注解简化异常处理。

希望这个上文能够帮助各位看官更好地理解和使用 Lombok! 记住要安装 IDE 插件才能使你的 IDE 正确识别 Lombok 生成的代码。

相关推荐
tekin16 分钟前
Go、Java、Python、C/C++、PHP、Rust 语言全方位对比分析
java·c++·golang·编程语言对比·python 语言·php 语言·编程适用场景
Vitalia20 分钟前
从零开始学 Rust:基本概念——变量、数据类型、函数、控制流
开发语言·后端·rust
李长渊哦1 小时前
Java 虚拟机(JVM)方法区详解
java·开发语言·jvm
陌殇殇2 小时前
002 SpringCloudAlibaba整合 - Feign远程调用、Loadbalancer负载均衡
java·spring cloud·微服务
猎人everest3 小时前
SpringBoot应用开发入门
java·spring boot·后端
山猪打不过家猪5 小时前
ASP.NET Core Clean Architecture
java·数据库·asp.net
AllowM5 小时前
【LeetCode Hot100】除自身以外数组的乘积|左右乘积列表,Java实现!图解+代码,小白也能秒懂!
java·算法·leetcode
不会Hello World的小苗6 小时前
Java——列表(List)
java·python·list
二十七剑7 小时前
jvm中各个参数的理解
java·jvm
东阳马生架构8 小时前
JUC并发—9.并发安全集合四
java·juc并发·并发安全的集合