Spring Boot 之 Lombok 使用详解

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

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

1. 添加 Lombok 依赖:

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

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 字段和非空字段的构造函数。

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

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

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

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

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

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

    java 复制代码
    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 依赖)

java 复制代码
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 实体类:

java 复制代码
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 生成的代码。

相关推荐
wowocpp1 小时前
spring boot Controller 和 RestController 的区别
java·spring boot·后端
后青春期的诗go1 小时前
基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(二)
开发语言·后端·rust·rocket框架
freellf2 小时前
go语言学习进阶
后端·学习·golang
独泪了无痕2 小时前
MongoTemplate 基础使用帮助手册
spring boot·mongodb
全栈派森4 小时前
云存储最佳实践
后端·python·程序人生·flask
CircleMouse4 小时前
基于 RedisTemplate 的分页缓存设计
java·开发语言·后端·spring·缓存
獨枭5 小时前
使用 163 邮箱实现 Spring Boot 邮箱验证码登录
java·spring boot·后端
维基框架5 小时前
Spring Boot 封装 MinIO 工具
java·spring boot·后端
秋野酱5 小时前
基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
☞无能盖世♛逞何英雄☜5 小时前
Flask框架搭建
后端·python·flask