ioc和di的区别和关系(深入浅出之控制反转)
ioc和di的区别和关系(深入浅出之控制反转)
2024-11-22 06:02:00  作者:謌峩灭丗  网址:https://m.xinb2b.cn/know/qxs197539.html

控制反转(Inversion of Control,缩写为IoC)和依赖注入(Dependency Injection)在当今软件工程中占有举足轻重的地位,两者之间有着密不可分的联系。

接下来将深入浅出,举例说明什么是控制反转,什么是依赖注入,以及它们之间的关系。

什么是依赖注入?

依赖注入就是参数传递

上面的定义你也许会感到惊讶,就这?是的,就是这么简单。依赖注入是在一个类中以参数传递的形式引入另外的类,它本身是参数传递的一种形式。但是,反过来就不成立,参数传递不一定是依赖注入,可能是普通的参数,而非某个类。可能这么定义还不够清晰,下面的代码将帮助你理解,

class IocTest{ protected $logger; public function __constructor(DbLogger $logger){ $this->logger = $logger; } public function hello(){ $this->logger->hello(); }}

这里的IocTest类,通过依赖注入的方式引用了DbLogger类,这里假设DbLogger是将日志写入数据库。代码使用PHP编写,本身比较简单,可以使用任何面向对象的编程语言改写。

什么是控制反转?高等级的代码不能依赖低等级的代码;抽象接口不能依赖具体实现;

上面是控制反转的定义,同样比大多数文章描述的简单,定义本该这么简洁。所谓高等级的代码,可以理解为抽象类、接口、装饰类等等;所谓低等级的代码,可以理解为抽象类的具体实现,定义具体功能的类。这么说可能还是不够直观,还是举例说明,


IoC&DI

这张图比较主观的说明了什么是控制反转和依赖注入,同时也很好的说明了它们之间的关系。如果IocTest类依赖具体的类DbLogger,代码完全失去了灵活性,当我们需要将日志输出到文件,需要创建一个新的IocTest类,将依赖的DbLogger改成FileLogger,

class IocTest{ protected $logger; public function __constructor(FileLogger $logger){ $this->logger = $logger; } public function hello(){ $this->logger->hello(); }}

要解决这个问题,需要对DbLogger和FileLogger进行抽象,IocTest类依赖抽象类LoggerInterface,这样就实现了代码的解耦,IocTest不需要强依赖于具体类,增加了可扩展性。

总结控制反转解决代码的强耦合,增加了代码的可扩展性,这也就是为什么当今流行的框架Spring Boot和Laravel底层都是采用IoC;控制反转是为了实现更灵活的依赖注入,而非消灭依赖注入;当解决过度依赖,对具体类进行抽象的时候,便产生了Ioc,之后依赖注入的是抽象类。,
  • 有哪些免费的招投标信息网站(干货招投标网站大全)
  • 2024-11-22干货招投标网站大全99%的投标人【关注】剑鱼标讯,都中标了!剑鱼标讯4000万条招标信息免费看100000条项目信息日日更1000000万名投标人天天用更有定制推送等各种功能0元享想要掌握最新项目信息吗?私信回复【中标。
  • 克隆人是否该存在,为什么(克隆人为何一直没有出现)
  • 2024-11-22克隆人为何一直没有出现克隆实质上就是无性繁殖,听起来是一项很高超的科学技术,但其实我们的身体里就有无数克隆成品我们都知道人类是由一个受精卵发育而来的,受精卵细胞经过无数次分裂和分化,才形成一个个体,这个过程其实就是细胞的克。
  • 月经期间不能做的事(月经期间不能做的事)
  • 2024-11-22月经期间不能做的事女性朋友在月经期间除了注意饮食之外,还要知道哪些事情能做,哪些事情不能做,这样才能舒舒服服地度过月经期月经期间不能做的事呢?就让佰佰安全网的小编和你一起去了解一下吧!1、月经期间尽量不要洗头,如果非洗。
  • 狗狗吃三文鱼油的好处有哪些 海狗油对狗狗的16点好处
  • 2024-11-22狗狗吃三文鱼油的好处有哪些 海狗油对狗狗的16点好处烨澄2015-07-1515:44:11海狗油是科学家运用高端技术从海狗脂肪从提取的高端营养食品,其内包含丰富的不饱和脂肪酸海狗油具有滋阴补阳、补血益气、养颜美肤、强筋壮骨等作用狗油对狗狗的好处如下:。
  • 情人节祝福语大全卡片(关于情人节祝福语)
  • 2024-11-22关于情人节祝福语初恋的人,期待着情人节的到来;热恋的人,每天过着都是情人节!但愿天下的有情人,天天都是情人节!二月春风拂柳杨,情人节里结情网时间虽紧张,工作尤繁忙,今天一定陪在爱人旁,情人节给心爱的人煲个爱情汤——必。
  • 向日葵远程插座开关机使用教程(多功能独立分控)
  • 2024-11-22多功能独立分控#头条创作挑战赛#时间因为疫情的原因,时不时地被公司通知居家办公,因为在家里不能随时访问公司电脑内的一些重要资料,所以就令办公效率大打折扣为了防止以后再居家办公时出现这种情况,于是我就想到了一个办法来。
  • 菩提是什么意思
  • 2024-11-22菩提是什么意思菩提子,并非指菩提树指果实它产于雪山附近其树属一年生草木,春天生苗,茎高三四尺,叶如黍,开红白花,呈穗状;夏秋之间结果,圆而色白,有尖壳,如珐琅质,俗用为念佛之数珠,盘玩后期多为牛津红,润透而有光泽,。
  • 文物古迹敦煌石窟(百年敦煌石窟考古重大成果)
  • 2024-11-22百年敦煌石窟考古重大成果作者:张小刚(敦煌研究院研究馆员、考古研究所所长)敦煌石窟包括了世界文化遗产敦煌莫高窟在内的多处石窟群1900年,莫高窟发现了藏经洞,数以万计秘藏千年的文书与艺术品重见天日百年来,敦煌学逐渐成为一门国。
  • 阿曼达多肉怎么养(可爱的胖达养不了)
  • 2024-11-22可爱的胖达养不了大家好,我是唐长老,最近有肉友问:多肉熊猫脸是什么来历?有什么特点?好不好养?养护有什么需要注意的地方?熊猫脸的叶片也能红透熊猫脸是什么来历?第一次看到熊猫脸这种多肉,我是很懵圈的,毕竟它看起来只白不。
  • 小米12s pro搭载骁龙什么处理器(首发骁龙8性能超神)
  • 2024-11-22首发骁龙8性能超神一、前言:首发新芯联名徕卡双喜临门这代s变化有些大作为首发新一代骁龙8的水桶旗舰,小米12Pro一经发布就收获了不小的关注在新架构、新工艺的加持下,骁龙8的极限性能猛增,甚至摸到了苹果的尾烟,实在让人。