惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
爱范儿
爱范儿
GbyAI
GbyAI
博客园 - 叶小钗
Last Week in AI
Last Week in AI
Jina AI
Jina AI
Microsoft Security Blog
Microsoft Security Blog
云风的 BLOG
云风的 BLOG
C
Check Point Blog
H
Help Net Security
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
大猫的无限游戏
大猫的无限游戏
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog RSS Feed
Y
Y Combinator Blog
U
Unit 42
T
Tailwind CSS Blog
MyScale Blog
MyScale Blog
N
Netflix TechBlog - Medium
S
SegmentFault 最新的问题
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - 火军刀

Vue3写法 创建测试表专用语句 基于Junit5的MockMvc单元测试基础方法 在指定目录下搜索文件名包含"项目"二字的Excel文件 启动Redis报错: # QForkMasterInit: system error caught. error code=0x00000070, message=CreateFileMapping failed.: no space on device eclipse为什么不允许查看包文件所在的目录? Hutool怎样指定日志工具 No matching distribution found for volcenginesdkarkruntime 如果你的idea右侧边栏和下边栏消失不见,没有了,不要惊慌 IDEA中使用腾讯云代码助手CodeBuddy 找到多个名为spring_web的片段 Spring的pom.xml中的依赖 如果你的uniapp连不上手机 ollama可以不装在C盘,ollama安装时怎么选择路径? deepseek和千问是什么关系?DeepSeek-R1-Distill-Qwen-7B,这个模型中的deepseek和qwen是什么关系? properties对象 10种Java从数据库中取出数据的完整过程 用DOS命令删除子目录中所有文件名中包含“(1)”的文件 log4j.properties
控制反转的通俗理解
火军刀 · 2025-05-01 · via 博客园 - 火军刀

控制反转,是一种模式。直观地看字面意思,不太容易理解,特别是那个“反转”二字。一旦明白了它的含义,就会觉得这个描述是对的。

先不从技术入手,我们先从生活中的场景入手。

中国古代是农业社会,经济模式是小农经济。农民没有钱去买别人的东西,所以只能自己做。房子,自己盖;粮食蔬菜,自己种;面粉,自己磨;衣服,自己纺……。除了一些自己肯定做不了的东西,比如瓷碗、铁器等必须要买,其它的都自己做。

这就叫传统的依赖方式。我们人类是对这些“对象”有依赖性的,不能不穿衣,不能不吃饭。

但同时也有控制性,这些我自己做的东西,“都是我的”,是我主动创建的,我有控制权。

这些东西,也可以称为“依赖”,此处的依赖,这是个名词,指是我们依赖的这些东西。

后来,我们国家强大了,进入了工业社会,社会化分工越来越细,人们各司其职,都在做不同的产品。我再需要什么东西的时候,不必再自己做了,只要在某个地方登记一下,当我需要的时候,就会给我送来。这就叫“依赖注入”。比较形象的是你要买个空调,送来并安装==注入。“某个地方”就是IoC容器,现实生活中相当于超市、家电卖场等机构。我们下了订单,他们就给我们new了一个,送过来并安装好,相当于赋值操作。

但此时要注意,在我购买之前,空调的控制权并不在我这里,而是归卖场的。

我们对于“对象”的获取,是“被动接受”的方式。

所以这就叫“控制反转”,由主动变被动,更准确的名称应该是“控制权反转”。

再举一个IT界常见的现象。特别能说明什么是“控制反转”。

某油公司,早期的信息化建设是各自为政。每个下属单位包括集团直属部门都有自己的信息化团队,或者自己去找软件开发公司去构建自己的信息系统。各单位自己就是付款方,就是甲方,直接向软件公司提需求,软件公司直接实现,非常方便快捷,效率很高。这叫“传统依赖”模式,自给自足,丰衣足食(当然,这种模式有它的弊病,此处不提)。后来,集团决定所有信息化建设统一由集团直管的S软件公司负责。所有的信息化建设必须经过S公司,费用统一由集团数信部支付,也就是说数信部是S的甲方。各单位如果有软件需求,向S提。这时候问题就来了,S的甲方不是各单位,各单位需求实现程度,与S的收入关系不大,他们对于各单位提的需求就不是很积极。而且S的级别要比各单位高得多,这样一来的话,信息系统的控制权就完全不在各单位手里了。

这是一种典型的“控制反转”案例。信息系统的控制权由主动创建变为被动接受。

控制反转之所以称之为控制反转,是从“对于所依赖的对象的控制权的角度”来看的,由主动创建变为被动接受。

如果从业务类(使用依赖对象的类)的角度来看,这应该叫“依赖外包”。即,我所依赖的对象,不需要再自己创建了,外包出去,我需要的时候给我来一个。我不关心怎么来的,用的时候有这样一个实例就可以了。