type
status
date
slug
summary
tags
category
icon
password
下面用最白话、最接地气的方式,把
@Autowired 给你讲清楚。
看完你应该能回答:它是干嘛的?什么时候用?为什么不用 new?@Autowired 详解
一句话先记住
@Autowired = 让 Spring 帮你创建对象,并自动“塞”进来用
你不用
new,Spring 帮你干。一、没有 @Autowired 时你是怎么写代码的?
传统写法(不推荐)
这样写的问题
❌
OrderService 强依赖 UserService
❌ 不方便测试
❌ 不利于扩展(以后换实现很麻烦)二、用了 @Autowired 之后(推荐)
这句话等价于什么?
👉 你对 Spring 说:
“这个 UserService,你帮我准备好,我要用”
三、Spring 到底帮你做了什么?
Spring 启动时,做了 3 件事
1️⃣ 扫描项目
2️⃣ 找到
@Component / @Service / @Repository / @Controller
3️⃣ 创建对象,放进 Spring 容器📦 Spring 容器 = 超级对象仓库
@Autowired 的本质
从 Spring 容器中,拿一个合适的对象,自动注入进来
四、一个生活化比喻(很好记)
场景:点外卖 🍱
- 你(OrderService)
- 外卖平台(Spring)
- 外卖(UserService)
❌ 不用 @Autowired
=
👉 你自己下厨做饭
✅ 用 @Autowired
=
👉 你告诉平台:
👉 “我要一份 UserService”
五、@Autowired 常见使用方式(重点)
1️⃣ 属性注入(最常见)
👍 简单
⚠️ 不推荐在重要业务中大量使用(测试不方便)
2️⃣ 构造方法注入(最推荐 ⭐)
为什么推荐?
- 依赖 必须有
- 对象一创建就完整
- 非常适合单元测试
👉 真实项目里,优先用这个
3️⃣ Setter 注入(了解即可)
适合:
- 依赖是可选的
六、@Autowired 按什么规则找对象?
规则顺序(面试常问)
1️⃣ 先按类型找
2️⃣ 如果有多个 → 按名字找
3️⃣ 还不行 → 报错 ❌
示例:多个实现时会报错
解决办法 1:@Qualifier(常用)
解决办法 2:@Primary
👉 默认就用它
七、@Autowired(required = false) 是干嘛的?
意思是:
“有就注入,没有也不报错”
常见场景:
- 监控
- 插件
- 可选功能
八、常见错误(初级最容易踩)
❌ 忘了加 @Service
Spring 根本不知道它是谁
👉 注入必失败
❌ 自己 new 还想 Autowired
❌ Spring 不管你自己 new 的对象
👉
@Autowired 不会生效九、什么时候不能用 @Autowired?
场景 | 原因 |
static 变量 | Spring 管不了 |
new 出来的对象 | 不在容器里 |
普通工具类 | 建议用静态方法 |
十、给工程师的终极记忆口诀
对象交给 Spring 管需要用的地方加 @Autowired不要自己 new
十一、小结
@Autowired 是 Spring 的依赖注入注解,用来从 Spring 容器中自动注入 Bean。 默认按类型注入,如果有多个实现可以配合 @Qualifier 或 @Primary 使用。 在生产项目中更推荐使用构造方法注入。
Spring IOC + DI 流程图
一、先给你一张「全流程总览图」(核心)
二、什么是 IOC?用一句话讲清楚
❌ 没有 IOC(传统方式)
你自己:
- 创建对象
- 管理对象
- 控制生命周期
✅ 有 IOC(Spring)
👉 对象的控制权交给 Spring
📦 IOC(Inversion of Control)= 控制反转
三、IOC 容器你可以这样理解(很重要)
👉 Spring 提前帮你把对象都准备好
四、DI 是什么时候发生的?(关键点)
DI = Dependency Injection(依赖注入)
发生在:
Bean 创建之后,Bean 初始化之前
也就是这一步 👇
五、结合真实代码 + 流程图(最好理解)
示例代码
Spring 内部实际流程(白话版)
六、IOC + DI 分工对照表(必记)
概念 | 负责什么 |
IOC | 创建 & 管理对象 |
DI | 给对象注入依赖 |
一句话总结:
IOC 负责“对象从哪来” DI 负责“对象怎么连起来”
七、如果用一句话画「流程图」
八、初级工程师最容易混淆的点(重点提醒)
❌ 误区 1:@Autowired 会创建对象
❌ 错
✅ 创建对象的是 IOC
❌ 误区 2:new 出来的对象也能注入
❌ 错
✅ 只有 IOC 容器里的对象才能 DI
九、终极记忆口诀(一定要背)
IOC 管对象DI 管关系@Component 进容器@Autowired 建联系
附:IOC + DI + AOP Combined Flowchart

Catalog