ioc和di的区别和关系(深入浅出之控制反转)
ioc和di的区别和关系(深入浅出之控制反转)
2024-11-05 10:52:37  作者:謌峩灭丗  网址:https://m.xinb2b.cn/life/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-05瑞幸生酪拿铁大火近日,咖啡圈刮起了“奶酪芝士风”10月10日瑞幸推出生酪拿铁,上新当日销量破131万杯,成为“首发日单品王”;上市一周,更是突破了659万杯从代数学家、MannerCoffee、MStand到各个城市。
  • 没有多少层楼房也有电梯吗(真正的豪宅车也能坐电梯)
  • 2024-11-05真正的豪宅车也能坐电梯带有空中车库的豪宅从发动机响起,走上“搬砖”路,再到载满期盼,回归自己的港湾,不知不觉间,车已经成为生活中不可缺失的伙伴,车位的重要性更是不言而喻然而,有车位还不够,如何才能最大化守护爱车的安全?这可。
  • 松下全自动洗衣机使用方法(松下全自动洗衣机如何使用)
  • 2024-11-05松下全自动洗衣机如何使用插上电源插头,放下或接好排水管,打开自来水龙头,把要洗涤的衣物和洗衣粉及添加剂软化剂、漂白剂等、故入洗衣机内,并将机盖关上按下电源开关,根据所洗涤衣物的多少选择好水位,并根据洗涤衣物的脏行程度和质料等。
  • 肝火旺痘痘长在哪(肝火旺长痘痘的地方)
  • 2024-11-05肝火旺长痘痘的地方眉心起痘多与肝脏有关,为减轻肝脏的负担,少吃油腻的东西,限制酒精的摄入量,喝酒伤肝此外保证充足的睡眠和适宜的运动量爱生闷气的人左边面颊最爱长痘,因为左边面颊长痘多半是因为肝功能不顺畅、有热毒造成的而右。
  • 多大的孩子学爵士舞好
  • 2024-11-05多大的孩子学爵士舞好5-9周岁开始学爵士舞,应该在5-9周岁之间,这时,孩子的身体骨骼发育比较完全但是家长如果想让孩子对爵士舞产生兴趣,就应该从3-4周岁开始,在幼儿园时期可以锻炼一下幼儿对舞蹈的协调性,例如跳一些之类的。
  • 太行精神:抗日烽火铸就的民族魂(血铸太行的民族英雄)
  • 2024-11-05血铸太行的民族英雄湖南省醴陵市烈士陵园内,左权将军纪念碑高高耸立,格外庄严肃穆,前来缅怀左权将军的社会各界人士络绎不绝1905年,左权出生在湖南省醴陵县(今醴陵市)的一个农民家庭,1924年入黄埔军校一期学习,1925。
  • 什么叫辟谷减肥法(马云和华晨宇都在试的辟谷减肥法)
  • 2024-11-05马云和华晨宇都在试的辟谷减肥法最近已经慢慢进入夏天了,大家的小肚腩小粗腿很快就遮掩不住了,各式各样的减肥帖子也开始流行了:轻断食、明星食谱、军方、拳头减肥法等等近几年因为很多明星都在宣称自己在辟谷,辟谷才走进大众视野里最有名的就是。
  • 猫咪每天必须知道的知识(猫咪一生中最重要的6件事)
  • 2024-11-05猫咪一生中最重要的6件事猫咪的寿命很短,只有匆匆十几年,在这短暂的一生中,它们也有自己认为重要的事情,你知道是什么吗?猫咪一生中,下面这6件事就是最重要的,你带它完成了几件?捕捉猎物猫咪是天生的捕猎者,它们很喜欢、享受捕猎的。
  • 高德地图最新ar导航(高德地图上线安卓AR步行导航)
  • 2024-11-05高德地图上线安卓AR步行导航3月18日,高德地图官方表示,近日发布的V10.80新版本上线了安卓版AR步行导航功能,目前已经支持绝大多数安卓手机加上不久前上线的iPhone版本,高德AR步行导航目前已经基本实现全机型覆盖高德地图。
  • 82年生的金智英 催泪片段(金智英和房思琪发疯之谜)
  • 2024-11-05金智英和房思琪发疯之谜《82年生的金智英》最开始进入人们的视野是因为韩国女团成员Irene,因透露自己在阅读《82年生的金智英》而被部分男粉丝迁怒他们烧了她的照片,在社交媒体辱骂她,似乎这部小说宛如潘多拉的盒子,打开后会造。
  • 适合二十几岁的平价眼霜品牌(好用的平民眼霜品牌推荐)
  • 2024-11-05好用的平民眼霜品牌推荐好用的平民眼霜品牌推荐:缓解双眸的疲惫感,让眼周肌肤更有活力~馥蕾诗玫瑰润泽水凝眼霜详细介绍:馥蕾诗玫瑰眼霜质地很水润,能够有效的对干燥的眼周肌肤进行滋养,缓解双眸的疲惫感,让眼周肌肤更有活力,因为熬。
  • ems运费是怎么算的
  • 2024-11-05ems运费是怎么算的EMS的运费是由寄件的重量、运送速度、运送地区和各种手续费等综合决定的一、重量起重500克及以内:20元,续重每500克或其零数:一区4元;二区6元;三区9元;四区10元;五区17元二、次晨达资费标准。