详解依赖注入和控制反转

逛完各大贴吧后,一时觉得自己又行了,用自己的理解在这里说一下依赖注入和控制反转

另外此番说辞只是本人片面见解,只希望可以对同在学习路上的大家有所帮助

如有错误欢迎大佬批评指正!!!

正文

        在翻阅各大贴吧的相关资料后,个人理解依赖注入控制反转的概念应该是大相径庭的,其在java等面向对象的编程语言中的具体含义可以理解为:

依赖注入

        当某个对象(调用者A)为了完成某些业务需要另一个对象(被调用者B)的支持,那我们就需要获取到该对象,在传统的代码编写中一般需要由调用者A手动创建被调用者B的实例,但此时调用者A完全依赖于被调用者B(强耦合),此时为了让调用者A不受制于被调用者B的不同实现所造成的的限制,就引入了容器的概念,将被调用者B的实例放入容器中在调用者A需要的时候从容器中取出提前放入容器中的被调用者B交给调用者A,这个过程就可以理解为依赖注入.

例如:在Spring中被调用者B的实例的创建、管理等都由Spring容器来完成,至于这个对象怎么创建,在什么时候创建,调用者A是不需要关注的,调用者A只要在需要的时候告诉Spring他需要某个类型的实例就可以

举个栗子:

        假如你想开车出去玩儿那此时就相当于是调用者A,出去玩儿就是一个业务,你要出去玩儿需要车子(被调用者B)的支持,如果你直接去买一辆车(调用者A直接创建被调用者B),那你可以去那里玩儿就取决于车子的不同类型(被调用者B的不同实现),你买一个家用小轿车,那你受制于车子的类型的限制(不同实现所造成的的限制),那你就不适合完成上山玩儿的这个业务,此时  你为了不受制于车子的不同类型,你放弃了买车(直接创建被调用者B),找了一个租车行(容器),此时你想去哪里玩儿(不同业务)只需要告诉车行(容器),你需要什么类型的车子(实例),车行直接把车子塞给你(依赖注入),你不需要关心车子是谁做出来的,是怎么做出来的!

控制反转

        正常的完成业务调用者A要使用被调用者B,就要在调用者A里实现被调用者B那此时调用者A就受制于被调用者B的不同实现形式(强耦合),此时为了改变这种强耦合的编码形式,提高代码的灵活性,让调用者A在使用被调用者B的同时不受制于被调用者B的不同实现,就引入了控制反转的思想,其目的就是将调用者A在整个业务中的被动的现状通过容器进行一个改变

就比如你需要一个车子  你依赖于车子的最终目的是它可以代步,但如果你自己买个车子,你就受制车子的不同类型,此时你就处于一个被动的状态,你为了不这么被动,就找了一个车行(容器),你只要告诉他你的最终目的是你需要一个代步工具,然后车行会根据你的业务需求给你不同的车子,此时你就不需要关心车子的具体实现,你就不会受制于车子的不同类型,在这个业务中就就不会处于一个被动状态,这就是控制反转

注:

调用者A依赖于被调用者B,A依赖B是他俩之间的关系

控制反转后并不会改变他俩的关系,不会变成B依赖A,

控制反转更多的指的是责任的反转而不是关系的反转

在这儿举一个不雅的栗子,勿怪!!!

你爸和你 父亲/儿子这是你俩的关系

控制反转后并不会改变你俩的关系

更多的指的是责任!!!

你小时候你爸照顾你,等他老了你照顾你爸,你俩之间的关系没有反转,反转的是责任

栗子不雅,勿怪!!!!!

以上只是个人理解,只希望能帮助到学习路上的各位,欢迎大佬指正

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值