不灭的焱

革命尚未成功,同志仍须努力 下载Java

作者:AlbertWen  添加时间:2026-03-02 16:50:10  修改时间:2026-03-03 05:41:41  分类:07.Java框架/系统  编辑

豆包回答:

你想了解 Spring Boot 中 @RequiredArgsConstructor 注解的具体作用,这个注解是 Lombok 库提供的,核心是帮我们简化构造函数的编写。

一、核心作用与原理

@RequiredArgsConstructor 是 Lombok 提供的注解,作用是自动为类中「需要初始化的字段」生成对应的构造函数

  • 「需要初始化的字段」指:被 final 修饰的字段、被 @NonNull 注解标记的字段(这两类字段必须在创建对象时赋值)。
  • 生成的构造函数会包含所有这类字段,且构造函数的参数顺序与字段在类中的声明顺序一致。
  • 核心价值:替代手动编写构造函数,减少样板代码,尤其在 Spring 依赖注入(如构造器注入)场景中常用。

二、使用示例(对比手动编写 vs 注解简化)

1. 手动编写构造函数(传统方式)

如果不用 Lombok,你需要手动为 final 字段写构造函数:

import org.springframework.stereotype.Service;

@Service
public class UserService {
    // final 字段必须初始化
    private final UserRepository userRepository;
    // @NonNull 标记的字段也需要初始化
    @NonNull
    private OrderService orderService;

    // 手动编写构造函数
    public UserService(UserRepository userRepository, OrderService orderService) {
        this.userRepository = userRepository;
        this.orderService = orderService;
        // @NonNull 会自动生成非空校验(手动写的话需要自己加)
        if (orderService == null) {
            throw new NullPointerException("orderService is marked non-null but is null");
        }
    }
}

2. 使用 @RequiredArgsConstructor(简化方式)

加注解后,Lombok 会在编译期自动生成上述构造函数,代码大幅简化:

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor // 自动生成构造函数
public class UserService {
    private final UserRepository userRepository; // final 字段
    @NonNull
    private OrderService orderService; // @NonNull 字段

    // 无需手动写构造函数,Lombok 自动生成
}

三、Spring Boot 中的典型应用场景

在 Spring Boot 中,@RequiredArgsConstructor 最常用的场景是构造器注入(Spring 官方推荐的依赖注入方式):

  1. Spring 会通过构造函数为 final 字段注入依赖(如 UserRepository);
  2. 结合 @Service/@Controller/@Component 等注解,无需再写 @Autowired(Spring 4.3+ 支持构造器注入时省略 @Autowired);
  3. 示例(完整的 Spring Boot 用法):
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor // 生成包含 userService 的构造函数
public class UserController {
    // final 字段,由 Spring 通过构造器注入
    private final UserService userService;

    @GetMapping("/users")
    public String getUsers() {
        return userService.listUsers();
    }
}

四、注意事项

  1. 该注解属于 Lombok,需先引入 Lombok 依赖(Maven 示例):
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.30</version>
        <scope>provided</scope>
    </dependency>
  2. 仅为 final/@NonNull 字段生成构造函数,普通字段不会包含;
  3. 若类中没有 final/@NonNull 字段,该注解不会生成任何构造函数;
  4. 与其他构造函数注解的区别:
    • @NoArgsConstructor:生成无参构造函数;
    • @AllArgsConstructor:生成包含所有字段的构造函数;
    • @RequiredArgsConstructor:仅生成包含「必须初始化字段」的构造函数。

总结

  1. @RequiredArgsConstructor 是 Lombok 注解,自动为类中 final/@NonNull 字段生成构造函数,减少样板代码;
  2. 在 Spring Boot 中,它常配合构造器注入使用,替代手动编写构造函数和 @Autowired(简化依赖注入);
  3. 核心优势:简化代码、符合 Spring 官方推荐的构造器注入规范,同时 Lombok 会自动为 @NonNull 字段生成非空校验。