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

相关推荐
BUG指挥官16 分钟前
Redis已接入AI
数据库·人工智能·spring boot·redis·spring cloud
₍˄·͈༝·͈˄*₎◞ ̑̑码10 小时前
MyBatis操作数据库
数据库·mybatis
m0_5873830011 小时前
全民健身解决方案软件开发实战:从架构设计到落地指南
java·spring boot·spring·架构·需求分析
冰暮流星14 小时前
mysql之左外连接与右外连接
数据库·sql
azhou的代码园15 小时前
基于RFM模型的中小型企业客户管理系统
java·人工智能·spring boot·毕业设计
行百里er15 小时前
BeanPostProcessor:包装 Feign Client
spring boot·后端·监控
花生了什么事o15 小时前
自定义Spring Boot Starter全流程
java·spring boot·后端
疯狂打码的少年16 小时前
【数据库技术】复习日:关系代数 + SQL + 规范化(整理对比表)
jvm·数据库·笔记·sql
摇滚侠16 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 31
android·spring boot·笔记
torpidcat16 小时前
ruoyi-vue-pro 若依芋道 java springboot +mybatis 生日查询相关
java·vue.js·spring boot