通俗理解依赖注入和控制反转
我们来用个点外卖的故事把这两个概念讲明白。1. 先看“正常”的做法没有控制反转假设你是个很宅的程序员叫小张。你想吃午饭但你不信任外卖平台决定自己做饭。于是你的代码逻辑是 小张饿了 - 小张自己开火 - 小张自己炒菜 - 小张吃饭。这里的关键是小张掌握一切控制权。他亲自控制“什么时候做饭”、“做什么菜”、“怎么做”。但代价是小张必须依赖具体的厨具、食材。如果今天没电了环境变了小张就吃不上饭还得自己修电。2. 再看“依赖注入”的做法把依赖送进来后来小张想通了决定点外卖。他打开美团下单了一份“黄焖鸡米饭”。这时-依赖小张依赖“饭菜”才能不饿。-注入这份饭菜不是小张自己创造的而是由外卖小哥外部容器主动送进来给他的。用代码思维就是 小张的构造函数里不需要 new 黄焖鸡()只需要声明 我要一份午餐。 外部美团系统会根据订单把做好的饭“注入”到小张手里。这样小张就不用管饭是怎么做的、谁送的。他只要声明需求外部就给他塞进来。3. 什么是“控制反转”IoC继续上面的故事。以前小张控制着做饭的全流程买菜、切菜、开火。现在小张把控制权交出去了——他不再控制“什么时候拿到饭”、“饭从哪里来”。现在控制权在谁手里-美团平台也就是Spring这类IoC容器。- 美团决定什么时候接单、派哪个骑手、几点送达。小张只是被动地接收。这就叫控制反转控制权从“我小张”手里反转到了“容器美团”手里。---4. 它们俩是什么关系一句话总结控制反转IoC是思想依赖注入DI是实现方式。-控制反转就像你说“我懒得管饭怎么来你们安排吧”。-依赖注入就像外卖员真的把饭塞到你手里。这就是实现“我懒得管”的具体做法。5. 用代码类比伪代码没有IoC/DI自己掌控class 小张 { 午餐 我的饭; 小张() { 我的饭 new 黄焖鸡米饭(); // 自己new自己掌控 } }用了DI被注入class 小张 { 午餐 我的饭; 小张(午餐 送来的饭) { // 饭是别人传进来的不是自己new的 我的饭 送来的饭; } }外部容器Spring会这样调用午餐 饭 美团.下单(黄焖鸡); 小张 张三 new 小张(饭); // 依赖被注入进去了6. 为什么这很好-解耦小张不需要依赖具体的“黄焖鸡”明天他想吃“螺蛳粉”只要换个注入对象就行小张代码不用改。-好测试单元测试时你不需要真的叫外卖直接注入一个“假饭”Mock对象就行。-易维护如果做菜的流程变了比如从燃气灶变成电磁炉小张完全不知情不用改代码。---### 最后用大白话再总结一遍-依赖注入你需要的零件依赖不是你亲手造的而是别人从外面递给你。-控制反转你不再掌握“谁来递”、“什么时候递”的大权大权交给了外部的“总管”容器。所以当你听到“Spring框架通过依赖注入实现了控制反转”你就可以脑补Spring就像那个万能的外卖平台你只要声明你想要什么它就会在合适的时候把东西精确地送到你手上而你完全不用操心过程。

相关新闻

深入理解C++ 智能指针std::shared_ptr<一>各种构造方法

深入理解C++ 智能指针std::shared_ptr<一>各种构造方法

构造方式代码示例特点与说明默认构造std::shared_ptr<T> p;构造一个空的智能指针&#xff0c;不管理任何资源。裸指针构造std::shared_ptr<T> p(new T(args));直接传入 new 出来的裸指针。不推荐&#xff08;异常不安全&#xff0c;且容易误操作&#xff09;&#…

2026/8/23 23:55:53 阅读更多 →
用好 Python 上下文管理器:contextlib 让你少写一半 with 代码

用好 Python 上下文管理器:contextlib 让你少写一半 with 代码

用好 Python 上下文管理器&#xff1a;contextlib 让你少写一半 with 代码 with 语句几乎每个 Python 程序员每天都在用&#xff1a;打开文件、加锁、连接数据库。但很多人只停留在 with open(...) 这个层面&#xff0c;一旦需要自己封装资源或复用一段"进入/退出"逻…

2026/8/23 23:55:53 阅读更多 →
自动化运维-从零开始编写ansible剧本(二)

自动化运维-从零开始编写ansible剧本(二)

前言 前述文章自动化运维-ansible常用模块详解已经详细介绍过ansible 常用模块的Ad-hoc命令实现方式&#xff0c;适合执行 临时性、简单的任务&#xff1b;而使用较多的方式是通过ansible playbook实现多任务执行&#xff0c;无需重复多次输入命令。 本篇文章将通过剧本的方式…

2026/8/23 23:55:53 阅读更多 →

最新新闻

2026年招聘市场变革:即插即用型人才需求激增

2026年招聘市场变革:即插即用型人才需求激增

1. 2026年招聘市场的结构性变革 2026年的金三银四招聘季正在经历一场深刻的变革。作为连续八年跟踪招聘市场趋势的从业者&#xff0c;我清晰地感受到&#xff1a;企业用人逻辑正在发生根本性转变。过去那种"看重潜力、培养新人"的用人策略正在被"即插即用、快速…

2026/8/24 7:20:30 阅读更多 →
百度笔试高分攻略:算法优化与时间分配策略详解

百度笔试高分攻略:算法优化与时间分配策略详解

1. 先搞清楚百度笔试到底考什么、怎么考百度这类大厂的笔试&#xff0c;不是简单考你会不会写代码&#xff0c;而是综合考察三个层面&#xff1a;基础算法能力、场景化问题拆解、时间压力下的稳定输出。很多人一上来就刷题&#xff0c;但连题型分布和评分重点都没摸清&#xff…

2026/8/24 7:20:30 阅读更多 →
从程序报错到性能优化:深入理解操作系统用户态与内核态切换机制

从程序报错到性能优化:深入理解操作系统用户态与内核态切换机制

1. 从一次“无法运行”的报错说起&#xff1a;理解操作系统的保护伞最近在折腾一些本地部署的模型时&#xff0c;遇到了一个挺有意思的报错&#xff0c;和热词里那个“程序‘claude.exe’无法运行”有点像&#xff0c;不过我的场景是尝试在ARM架构的服务器上运行一个为x86_64编…

2026/8/24 7:20:30 阅读更多 →
InsufficiencyBench:评估大模型处理信息不足法律查询的能力与启示

InsufficiencyBench:评估大模型处理信息不足法律查询的能力与启示

你有没有遇到过这种情况&#xff1a;向一个看起来无所不知的AI助手咨询一个法律问题&#xff0c;比如“我租的房子漏水了&#xff0c;房东不管&#xff0c;我该怎么办&#xff1f;”&#xff0c;它立刻给你列出了一二三步&#xff0c;从发函到诉讼&#xff0c;逻辑清晰&#xf…

2026/8/24 7:20:30 阅读更多 →
如何给OpenUSD写自定义渲染器:从零到跑通

如何给OpenUSD写自定义渲染器:从零到跑通

如何给OpenUSD写自定义渲染器&#xff1a;从零到跑通 【免费下载链接】OpenUSD Universal Scene Description 项目地址: https://gitcode.com/GitHub_Trending/ope/OpenUSD 你在做要消费 USD 场景的产品时&#xff0c;会发现内置渲染器总差点意思&#xff1a;想画到 Web…

2026/8/24 7:20:30 阅读更多 →
Java面试全攻略:Spring与微服务核心技术解析

Java面试全攻略:Spring与微服务核心技术解析

1. 互联网大厂Java面试全攻略&#xff1a;从Spring到微服务实战解析作为一名经历过数十场技术面试的Java开发者&#xff0c;我深知大厂面试的考察重点和应对策略。今天我们就以"超好吃"同学的面试经历为蓝本&#xff0c;深度拆解Java技术栈的核心考点&#xff0c;不仅…

2026/8/24 7:19:30 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力&#xff1b;确需渲染 HTML 时&#xff0c;先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述&#xff1a;Windows登录密码的“黑匣子”每次你按下CtrlAltDel&#xff0c;输入密码&#xff0c;然后看到那个熟悉的桌面&#xff0c;这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者&#xff0c;我经常被问到&#xff1a;“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述&#xff1a;AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时&#xff0c;遇到一个典型案例&#xff1a;候选人在视频面试中无意提到竞争对手产品名称&#xff0c;系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →