简单解释什么是 依赖注入 和 控制反转 1
关于 依赖注入
与 控制反转
的概念有些人觉得很难理解,最近在给别人讲这个概念的时候梳理了一个比较好理解的解释,而且我认为非技术人员也应该能听的懂,因此分享给大家,希望下次你在给别人讲的时候也能讲的明白。
其实 依赖注入
和 控制反转
说的是同一件事情,只是站的角度不同而已。
我们就拿超人和小怪兽的事情来做类比对象。
地球受到了威胁,不断有小怪兽来想要破坏地球,每来一个小怪兽我们就需要找一个超人去对付他,一个超人肯定是不够的,因为每次来到小怪兽都是不一样的,他们所具有的能力也是不一样的。
因此我们必须找到合适的超人去对付他,最坏的情况是每来一个小怪兽我们就要找一个或者制造一个新超人,那么来十个小怪兽,我们就要制造十个,来百个就要制造百个,来千,来万,来亿我们就要制造相应的超人,而大部分超人只能用一次。
为了解决这个问题我们引入依赖注入和控制反转的概念,我们将超人和超能力分开,独立的超人和独立的超能力,当一个小怪兽来的时候我们找到超人,将相应的超能力给予他,让他去消灭小怪兽。
这样的话我们只需要几个超人就好了,我们不再需要制造超人,而是研究如何制造更多更好的超能力给超人使用。
超能力和超人不再是强依赖关系。超能力是由外部给予超人的,超人和超能力有依赖,但是这个依赖是外部给予,因此我们可以说超能力是由外部注入给他的,所以这就叫 依赖注入
。
而反过来说,超人具有何种超能力不是他内部自身控制的,而是由外部控制的,相当于将超能力具有何种功效交给了外部,外部来决定超人该有的超能力,所以超能力的控制权被由自身控制反转为外部控制,这被称为 控制反转
。
这就是关于 依赖注入
和 控制反转
的我的比较好理解的解释。它能较好的解决对象与对象之间的强耦合问题,同时也能做的按需使用按需加载。
顺便说一下,钢铁侠和蝙蝠侠更受欢迎的原因我认为就是因为他们的超能力是外部给予的,而非自身的,因此可以不断有新的超能力给他们使用,因此也更有看点和新鲜感。
简单解释什么是 依赖注入 和 控制反转 1相关推荐
- 简单解释什么是 依赖注入 和 控制反转
简单解释什么是 依赖注入 和 控制反转 2017-07-09 关于 依赖注入 与 控制反转 的概念有些人觉得很难理解,最近在给别人讲这个概念的时候梳理了一个比较好理解的解释,而且我认为非技术人员也应该 ...
- 依赖注入框架Dagger2详解(一),依赖注入和控制反转的深入理解
IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合.更优良的程序,而Dagger2框架是依赖注入思想践行者的优秀代表. 依赖注入框架Dagger2详解(一), ...
- [翻译]StructureMap 指南 – .NET中的依赖注入和控制反转
原文地址:http://www.pnpguidance.net/Post/StructureMapTutorialDependencyInjectionIoCNET.aspx StuctureMap ...
- 浅谈依赖注入与控制反转
前言:设计模式其实是一个很空洞的东西,设计模式有几十种,有些人觉得工厂模式也单例模式已经足够解决大部分问题.而有些人觉得任何设计模式都会让开发变得更"复杂",更"低效&q ...
- Spring的IOC(依赖注入和控制反转)
Spring框架面试笔试必问之一!非常重要也非常强大,说实话一开始仿照着Spring MVC配置搭建起来,再写几句增删改查,真的配不上叫做学会了那个框架.框架是N种优秀的设计模式和一些很高深的技术组合 ...
- springboot的IOC依赖注入与控制反转-举例(转载+自己整理)
这个记录是对[1]的整理和简化,便于日后遗忘时迅速恢复记忆. Spring框架有四大原则: ①使用POJO进行轻量级与最小侵入式开发 ②通过依赖注入和基于接口编程实现松耦合 ③通过AOP和默认习惯进行 ...
- Spring依赖注入和控制反转
文章目录 1.依赖注入 1.1.依赖注入和控制反转的概念 1.2.依赖注入的实现方式 1.3.控制反转的具体实现 1.4.依赖注入的具体实现 1.5.依赖注入和控制反转总结 1.依赖注入 1.1.依赖 ...
- Spring的依赖注入和控制反转很难理解?一文搞定
[用了这么久的Spring,一直没有理解好Spring的依赖注入和控制反转,以前看视频也没有老师讲清楚这个问题,今天终于刷到一个老师把这个问题讲清楚了,跪服大佬~~~] 孙哥说Spring5 全部更新 ...
- 依赖注入和控制反转的区别
控制反转:创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件控制,侧重于原理. 依赖注入:创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现. 依赖注入和控制反转是 ...
最新文章
- 用easyui动态创建一个对话框
- 阿里巴巴电商搜索推荐实时数仓演进之路
- Hibernate中sessoin的flush学习笔记
- js自定义函数及参数问题
- java019异常、File类
- python在中小学教学中的应用-小学信息技术教学中进行Python 编程语言教学的策略...
- java B2B2C Springcloud电子商城系统-Spring Cloud常见问题与总结(四)
- 研讨会 | “人工智能与行业知识图谱技术实战”研讨会
- 当你不能回答别人的提问时怎么办
- linux下order by 报出ORDER BY clause is not in SELECT list
- 等值连接_【高中地理】重难点内容:16种等值线的解读和应用
- java报错stderr_struts2 文件上传路径错误 ERROR [STDERR] java.io.FileNotFoundException:
- 少儿编程孩子的学习路线
- 用html做网页作品,HTML5实例:用HTML5制作的网页的15个优秀案例
- [笔记]WBS方法论
- c语言的数据类型说明保留字,第三章 数据类型、运算符与表达式
- 技术成长-不积跬步无以至千里
- 微软2015校园招聘 技术类职位在线笔试-题目1 : Browser Caching
- BOM:窗口位置、页面视口大小、window.open
- 十分详细的diff算法原理解析