QQ春靴学习系列—— 第2集 QQ春芯

2026年8月28日3 次浏览来源:Dev.to阅读原文

第2集 春天核心 理解IoC,依赖注射和豆类 在第一集中,我讲述了"春天"背后的"为什么"——紧凑相接,"春天"是如何接管对象的创建和提供(IoC + DI),而不是阶级创建自己的依附关系.

这个剧集从那里取出我还没有覆盖的部分: 春天在引擎盖下是如何做到的——豆子,春季容器和组件扫描。

为什么? ^ 实践 ^ 访谈问题 ^ 项目 ^ 项目 此集IoC和依赖性注射(快取) 春豆泉容器/应用Context 组件 Scanning 1→Q快取: 从第1集IoC和依赖性注射: 而不是一个类创建自己的依赖性 ^ 春创造依赖性,将其交给了班.

即"倒置控制"(IoC).

在代码中,这通常看起来像一个构造参数: 不再说"让我创建出一个票库".

上面写着"我需要一张票库"——"春天"供应一.

这种供应行为是依赖注射。

IoC = 控制对象的创建/管理 ^ Spring.

DI = 一个班级实际上如何收到它需要的东西 + 传入,而不是自我创造.

即复说已.

现在——这些"春天"创造的物体实际上来自何处,它们生活在哪里? 2️⃣"春豆"(Spring Bean)——当"春"为您创建和管理一个对象时,"春"(Spring)实际管理什么,那个对象叫做"豆".

这是你们在"春天"代码和文档中 可以看到的词汇,所以值得精确的描述。

注释是给"春"的信号:"这个班应该由你管理".

当斯普林从这个类中创建出一个对象时,那个特定的对象——一个斯普林所创建并正在追踪的——是一个豆.

比起你自己做: 此天体是一个完全普通的Java天体.

春天并不知道它的存在。

它不是一个"豆"——"春"不能在任何地方注入它,不能管理它的生命周期,也不能给它的依附者接线,因为"春"从来没有创造过它,也不知道它.

因此区分线很简单:一款"春豆"并不是一种特殊的类——它是"春"本身所创造和正在管理的对象.

完全相同的类可以产生一个"豆"(如果"春天"创建它)或一个平地对象(如果用.

这一点很重要,因为依赖性注射只对豆类有效.

如果不是豆子,春天没什么可注射的 3QQ Spring Contact (a.k.a. application Context) 因此豆需要创建并跟踪到某地. "有些地方"是"春季容器"——实际上,你最常看到它叫做"应用程序Context",这是"春季"具体执行容器.

具体来说,集装箱负责: 创建豆类案例(主要指建筑商) 将每个豆的参考文献存储在它创造的每一个豆上,这样它就能再次找到它们 找出每个豆的依赖性——例如它看到需要注入这些依赖性——将右豆传入管理豆的生命周期的右构造者——当它被创建,当它被清理时,当应用程序关闭时 以下是您的应用程序启动时的流程: 你从不自称——集装箱会自动为每个豆子的应用 做这种接线。

Spring Container / Application Context = 您的应用程序内创建出每个豆的运行系统,跟踪它们,并连接它们的依赖关系. 4++组件扫描——集装箱如何找到管理类别 这引起了一个显而易见的问题:集装箱无法管理一个它不知道存在的类别.

那么它是如何发现的呢?

这是组件扫描。

当您的 Spring 应用程序启动时, Spring 扫描您的项目包, 寻找带有特定说明的课: 这些都是技术上的变体——"斯普林"在扫描时用同样的方式对待它们,它们也只是带有额外的意义(例如也告诉斯普林翻译数据库例外).

具体地说,这一过程是这样的:

分享