springboot的依赖注入

依赖注入,通俗说就是:

一个类需要用到别的对象时,不自己去创建,而是让 Spring 帮它准备好、塞进来。


1. 先用生活例子理解

你开一家奶茶店,需要这些东西:

text 复制代码
奶茶师傅
茶叶
牛奶
杯子
收银机

如果你什么都自己准备,就像这样:

text 复制代码
我自己买茶叶
我自己买牛奶
我自己准备杯子
我自己找收银机

这叫 自己创建依赖

但如果有一个"后勤管家"提前帮你准备好:

text 复制代码
你只要说:我需要茶叶、牛奶、杯子
后勤管家就自动送过来

这就是 依赖注入

在 Spring Boot 里,Spring 就是这个"后勤管家"。


2. 在代码里是什么意思?

比如 ThoughtController 需要用到 ThoughtService

java 复制代码
@RestController
@RequiredArgsConstructor
public class ThoughtController {

    private final ThoughtService thoughtService;

}

意思是:

text 复制代码
ThoughtController 不自己 new ThoughtService
而是告诉 Spring:我需要 ThoughtService
Spring 启动时自动把 ThoughtService 塞进来

这就叫 依赖注入


3. 什么是"依赖"?

依赖就是:

A 类运行时需要 B 类帮忙,那么 B 就是 A 的依赖。

比如:

text 复制代码
Controller 需要 Service
Service 需要 Mapper
Mapper 需要数据库连接

关系大概是:

text 复制代码
Controller
   ↓ 依赖
Service
   ↓ 依赖
Mapper
   ↓ 依赖
Database

所以在你的项目里:

java 复制代码
ThoughtController

可能依赖:

text 复制代码
ThoughtService
UserService
MinioService

这些都可以由 Spring 自动注入。


4. 为什么要用依赖注入?

主要是为了让代码更好维护。

不用依赖注入时,可能这样写:

java 复制代码
public class ThoughtController {
    private ThoughtService thoughtService = new ThoughtService();
}

这样的问题是:

text 复制代码
Controller 和 ThoughtService 绑死了
以后想换实现、加代理、加事务、加日志都麻烦

使用依赖注入后:

java 复制代码
private final ThoughtService thoughtService;

Spring 来负责提供对象。

好处是:

好处 通俗解释
解耦 类和类之间不要绑太死
好测试 测试时可以换成假的 Service
好维护 改一个类,不容易牵连一堆地方
Spring 能管理 事务、缓存、AOP、日志增强都更方便

5. 常见注入方式

最推荐的是 构造器注入

java 复制代码
@Service
@RequiredArgsConstructor
public class ThoughtService {

    private final ThoughtMapper thoughtMapper;

}

意思是:

text 复制代码
ThoughtService 需要 ThoughtMapper
Spring 启动时会自动传进来

以前也常见这种:

java 复制代码
@Autowired
private ThoughtMapper thoughtMapper;

这个叫字段注入,现在不太推荐。


6. 为什么你会报错?

因为 Spring 注入时找不到某个东西。

比如它看到:

text 复制代码
创建 ThoughtController 需要:
1. ThoughtService
2. UserService
3. String

前两个是 Spring 管理的对象,它能找到。

String 是普通字符串,不是 Spring 管理的业务对象。

所以它会懵:

text 复制代码
你让我注入一个 String?
我仓库里没有 String 类型的 Bean 啊。

然后启动失败。

这就是你之前看到的类似错误:

text 复制代码
required a bean of type 'java.lang.String' that could not be found

7. 一句话总结

依赖注入就是:一个类需要用到别的类时,不自己创建,而是让 Spring 自动把需要的对象传进来。

你可以把 Spring 理解成:

一个专门管理对象的仓库。

哪个类需要什么对象,Spring 就从仓库里拿出来给它。

相关推荐
今天AI了吗11 小时前
深度学习基础-Harness:从评估框架到工程落地
数据库·人工智能·sql·深度学习·机器学习
星空11 小时前
Springboot复习
java·spring boot·spring
码农颜11 小时前
6.1.2 常⽤⽅法的问题
数据库·sql·oracle
TJHHH.13 小时前
SQL注入学习总结
数据库·笔记·sql·学习·注入
wno70413 小时前
Spring Boot JdbcTemplate配置Druid多数据源
java·spring boot·后端
wear工程师13 小时前
Spring Boot 服务挂了却没重启?先分清 systemd 的三次判断
spring boot
云水一下14 小时前
零基础玩转bWAPP靶场(六十三):Drupal SQL Injection (Drupageddon)
sql·web安全·bwapp
旺仔学长 哈哈14 小时前
52486|高校专业评估不再靠表格:Spring Boot 本科专业质量评估管理系统实战
数据库·spring boot·毕业设计·教育管理
weixin_BYSJ198715 小时前
springboot小区物业管理小程序---附源码45555
java·javascript·spring boot·python·django·flask·php
RuoyiOffice15 小时前
抓包还能看到密码?Vue3 + Spring Boot 3 接口 AES/RSA 加解密(@ApiEncrypt)全链路实战
spring boot·vue3·aes·rsa·接口安全·spring boot 3·apiencrypt