豆包回答:
你想了解 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 官方推荐的依赖注入方式):
- Spring 会通过构造函数为
final字段注入依赖(如UserRepository); - 结合
@Service/@Controller/@Component等注解,无需再写@Autowired(Spring 4.3+ 支持构造器注入时省略@Autowired); - 示例(完整的 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();
}
}
四、注意事项
- 该注解属于 Lombok,需先引入 Lombok 依赖(Maven 示例):
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency> - 仅为
final/@NonNull字段生成构造函数,普通字段不会包含; - 若类中没有
final/@NonNull字段,该注解不会生成任何构造函数; - 与其他构造函数注解的区别:
@NoArgsConstructor:生成无参构造函数;@AllArgsConstructor:生成包含所有字段的构造函数;@RequiredArgsConstructor:仅生成包含「必须初始化字段」的构造函数。
总结
@RequiredArgsConstructor是 Lombok 注解,自动为类中final/@NonNull字段生成构造函数,减少样板代码;- 在 Spring Boot 中,它常配合构造器注入使用,替代手动编写构造函数和
@Autowired(简化依赖注入); - 核心优势:简化代码、符合 Spring 官方推荐的构造器注入规范,同时 Lombok 会自动为
@NonNull字段生成非空校验。