本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net
在 Spring Boot 中,@RequiredArgsConstructor 和 @Autowired 都是用于依赖注入的工具,但它们有不同的用途和特点:
-
@RequiredArgsConstructor:
- 这是 Lombok 库提供的一个注解,用于自动生成构造函数。
- 当你使用
@RequiredArgsConstructor时,Lombok 会为类生成一个构造函数,该构造函数包含所有被标记为final或者带有@NonNull注解的字段。 - 这种构造函数被称为 “必需参数构造函数”,因为它要求在创建对象时必须提供所有必需的依赖项。
- 使用
@RequiredArgsConstructor可以确保类的实例化总是满足其依赖需求,避免空指针异常。
-
@Autowired:
- 这是 Spring 提供的一个注解,用于自动注入依赖项。
- 当你在一个字段、构造函数或设置方法上使用
@Autowired时,Spring 容器会在创建 bean 时自动注入相应的依赖项。 @Autowired可以用于按类型自动注入(默认行为),也可以通过指定@Qualifier来按名称注入。- 使用
@Autowired可以减少样板代码,因为不需要手动编写构造函数或设置方法来注入依赖项。 @Autowired要求 Spring 容器中必须存在对应的 bean,否则会抛出异常。
区别:
- 注入时机:
@RequiredArgsConstructor只在类构造时进行注入,而@Autowired可以在构造函数、字段或设置方法上使用,提供了更多的灵活性。 - 依赖检查:
@RequiredArgsConstructor强制要求所有标记为final或@NonNull的字段必须被注入,而@Autowired则不强制,除非使用了required=true。 - 适用场景:
@RequiredArgsConstructor适用于需要确保所有必需依赖项都被注入的场景,而@Autowired更加灵活,适用于各种依赖注入的场景。 - 与 Lombok 的集成:
@RequiredArgsConstructor是 Lombok 的一部分,需要 Lombok 支持,而@Autowired是 Spring 的一部分,不需要额外的库。 - 代码简洁性:使用
@RequiredArgsConstructor和 Lombok 可以减少样板代码,使代码更加简洁,而@Autowired则需要手动编写构造函数或设置方法。
总的来说,@RequiredArgsConstructor 可以实现更干净、安全的依赖注入。使用 Lombok 的 @RequiredArgsConstructor 可以自动生成必需参数的构造函数,而 @Autowired 则用于实际的依赖注入过程。