如何省略@Autowired注解

本文介绍如何使用Lombok注解@NoArgsConstructor、@RequiredArgsConstructor和@AllArgsConstructor简化Java Bean的构造方法生成。通过final修饰符增强依赖注入,避免@Autowired的显式使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在类上加上@RequiredArgsConstructor或者AllArgsConstructor

了解Lombok以下三个注解:

  • @NoArgsConstructor后会 生成无参的构造方法
  • @RequiredArgsConstructor会将类的每一个final字段或者non-null字段生成一个构造方法
  • @AllArgsConstructor 生成一个包含过所有字段的构造方法。

官方文档中说明,如果一个Bean有一个构造器,就可以省略@Autowired。

2.需要注入的变量使用final修饰
在这里插入图片描述

### 关于 `@Autowired` 注解的使用说明 #### 功能概述 `@Autowired` 是 Spring 框架提供的用于自动装配依赖的一种方式。当一个 bean 需要注入另一个或多个依赖时,Spring 容器会根据类型查找合适的 bean 并执行注入操作[^2]。 #### 自动装配机制 自 Spring 2.5 版本起引入了基于注解的依赖注入功能,其中核心注解即为 `@Autowired` 。此注解允许开发者简化配置文件中的 XML 设置,并让 Spring 能够解析并注入协作对象到当前定义的对象中去[^3]。 #### 构造函数注入 从 Spring 4.3 开始,对于只有单个构造函数的目标 Bean 来说,不再强制要求显式地标记 `@Autowired` ,因为此时框架可以默认识别唯一的构造参数作为待注入点;然而,在存在多构造函数的情况下,则仍然需要至少在一个构造函数上声明该注解以便指示具体的注入路径[^1]。 ```java public class MyService { private final MyRepository repository; // 单一构造函数场景下可省略 @Autowired public MyService(MyRepository repository) { this.repository = repository; } } ``` #### Setter 方法注入 除了构造函数外,还可以在 setter 方法上面应用 `@Autowired` 实现属性级别的依赖注入: ```java public class AnotherService { private MyRepository myRepository; @Autowired public void setMyRepository(MyRepository myRepository) { this.myRepository = myRepository; } } ``` #### 解决冲突的方法 当有超过一种相同类型的候选者可供选择时(比如项目中有两个实现了同一接口的不同实现类),可以通过配合使用 `@Qualifier` 或者命名空间限定等方式来精确控制应该选用哪个实例参与注入过程[^5]。 #### 原理剖析 为了深入理解 `@Autowired` 的工作流程,可以从研究如下两类组件入手: - **AbstractAutowiredCapableBeanFactory**: 处理基本的依赖关系管理逻辑; - **AutowiredAnnotationBeanPostProcessor**: 对带有特定注解(如 `@Autowired`)的字段、方法或构造函数进行处理[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值