@RequiredArgsConstructor和@Autowired区别
时间: 2024-03-13 10:41:18 浏览: 254
@RequiredArgsConstructor和@Autowired是Java中常用的注解,用于简化代码和实现依赖注入。它们的区别如下:
1. @RequiredArgsConstructor:
- @RequiredArgsConstructor是Lombok库提供的注解,用于自动生成构造函数。
- 当类中的字段被标记为final或者被@NonNull注解修饰时,@RequiredArgsConstructor会生成一个包含这些字段的构造函数。
- 该注解可以减少手动编写构造函数的工作量,提高代码的可读性和简洁性。
2. @Autowired:
- @Autowired是Spring框架提供的注解,用于实现依赖注入。
- 通过@Autowired注解,Spring会自动在容器中查找匹配的Bean,并将其注入到标记了@Autowired的字段、构造函数或者方法参数中。
- @Autowired可以根据类型进行自动装配,也可以结合@Qualifier注解指定具体的Bean名称进行装配。
相关问题
用@RequiredArgsConstructor代替@Autowired
### 使用 `@RequiredArgsConstructor` 替代 `@Autowired` 进行依赖注入
Lombok 提供的 `@RequiredArgsConstructor` 注解能够自动生成一个包含所有带有 `final` 或者没有显式赋值字段的构造函数。这种方式不仅简化了代码编写,还使得依赖通过构造器注入,增强了不可变性和线程安全性。
对于 Spring 应用程序而言,采用基于构造方法的依赖注入被认为是更优的选择之一[^1]。下面是一个具体的例子展示如何利用 Lombok 和 `@RequiredArgsConstructor` 来实现这一点:
```java
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/example")
@RequiredArgsConstructor // 自动生成带参构造函数用于依赖注入
public class ExampleController {
private final ExampleService exampleService;
// 控制层逻辑...
}
```
在这个案例里,不再需要手动定义构造函数或是使用 `@Autowired` 注解;只需要声明服务类作为成员变量并标记为 `final` 即可。这会触发 Lombok 自动创建相应的构造函数,在应用程序启动期间由 Spring 容器完成实例化过程中的依赖解析工作[^2]。
#### 构造器注入的优势
- **强制性**:确保所有的必需组件都被初始化。
- **不可变对象支持**:允许将属性设为 `final` 类型,有助于构建不可变的对象模型。
- **更好的测试友好度**:便于单元测试时模拟依赖关系。
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@RequiredArgsConstructor(onConstructor = @__(@Autowired)) 是使用 Lombok 注解的一种方式,用于生成一个带有构造函数的类。在这个注解中,@Autowired 是一个 Spring Framework 的注解,用于自动注入依赖。和引用的描述,这种写法在使用 @RequiredArgsConstructor 注解时是错误的。正确的写法是使用 @RequiredArgsConstructor(onConstructor_ = {@Autowired})。这样的写法可以确保在生成的构造函数中自动注入所需的依赖。
因此,如果你想使用 @RequiredArgsConstructor 注解来生成带有自动注入依赖的构造函数,应该使用如下的写法:
@RequiredArgsConstructor(onConstructor_ = {@Autowired})<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [Spring Boot 使用 RequiredArgsConstructor 参数 onConstructor 报错 找不到符号onConstructor_ __解决方法](https://blog.csdn.net/Lance_welcome/article/details/123232468)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [@RequiredArgsConstructor(onConstructor =@_(@Autowired))](https://blog.csdn.net/waitu88/article/details/112474954)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文