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 就从仓库里拿出来给它。

相关推荐
霸道流氓气质11 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
于先生吖11 小时前
SpringBoot对接大模型开发AI命理测算系统:八字排盘与AI解析接口源码全解
人工智能·spring boot·后端
Flittly12 小时前
【AgentScope Java新手村系列】(10)实战-多Agent天气助手
java·spring boot·spring
BD_Marathon13 小时前
SQL学习指南——视图
数据库·sql
2601_9620725514 小时前
李梦娇常识4600问|题库|打印版
sql·华为od·华为·c#·华为云·.net·harmonyos
星落zx14 小时前
Spring Boot 多模型集成:优雅调用全球主流大模型
人工智能·spring boot·chatgpt
一杯奶茶¥15 小时前
水果销售网站 CRM客户信息管理系统 超市管理系 酒店管理系统 健身房管理系统 在线音乐网站 校园招聘系统
java·vue.js·spring boot·mysql·spring·java项目
敲个大西瓜15 小时前
mybatis拦截器插件实现数据库字段加解密
mybatis
HackTwoHub15 小时前
Sqli-Scanner SQL注入SKILL自动化挖掘SQL注入,零依赖自动化SQL注入挖掘,赏金猎人
数据库·人工智能·sql·web安全·网络安全·自动化·系统安全
进阶的小名16 小时前
Spring Boot SSE + Nginx 配置:解决 EventSource 不实时返回、连接超时、流式响应被缓冲问题
spring boot·后端·nginx