IoC有什么好处
2024-09-05 18:42:57
IoC(Inversion of Control):控制反转。
DI(Dependency Injection):依赖注入。
控制反转是目的,依赖注入是实现控制反转的手段。
控制反转是一种面向对象的思想,它是一种宽泛的概念,只要一个类将对它内部状态的控制权交由其他机制去完成即为『控制反转』。控制反转是为了降低类与类之间的耦合度。
而Spring采用依赖注入这一具体的手段来达到控制反转的目的
依赖注入的做法是:将被依赖对象的创建与维护工作交由专门的机构,而依赖类中只需要声明所需要的成员变量。
也就是说,依赖类原本需要主动去获取对象,但采用依赖注入后对象由第三方机构提供,自己仅需声明需要什么对象即可。
这样做的目的就是为了降低两个类之间的耦合程度。
PS:在Spring中,那个创建、管理对象的机构就称为『IoC Service Provider』。
但此时还没体现出依赖注入能降低耦合度这一点,只有当依赖注入与面向接口编程结合起来,才能真正发挥依赖注入的优势。接下来先介绍一下『面向接口编程』。
面向接口编程
若某一类服务有多种不同的实现,我们需要抽象出一个接口,并在接口中定义一套API。在使用时声明接口类型变量,并用实现类的对象赋值。接下来通过接口类型的变量调用服务即可。当功能发生变化时,仅需替换实现类即可
在面向接口编程的基础上使用依赖注入的好处
上述过程如果要换一种实现,就必须要修改A类的代码,再重新编译。而使用了依赖注入后,由于依赖类不需要自己创建维护被依赖对象,该过程由IoC Service Provider完成。因此,当需要替换实现类时,只需在IoC Service Provider中修改,被依赖类、依赖类都不会受到影响,此时这两个类是松耦合的。
上述过程如果要换一种实现,就必须要修改A类的代码,再重新编译。而使用了依赖注入后,由于依赖类不需要自己创建维护被依赖对象,该过程由IoC Service Provider完成。因此,当需要替换实现类时,只需在IoC Service Provider中修改,被依赖类、依赖类都不会受到影响,此时这两个类是松耦合的。
作者:大闲人柴毛毛
链接:https://www.zhihu.com/question/23277575/answer/247023315
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
最新文章
- Entity Framework 6 Recipes 2nd Edition(10-8)译 - >;映射插入、修改、删除操作到存储过程
- sqlserver锁表、解锁、查看销表 (转载)
- Qt与VC编程合作起龌龊
- SharePoint Error:a system restart from a previous installation or update is pending
- BZOJ3994: [SDOI2015]约数个数和
- Solution multisite htaccess cleanURL
- memcached在windows7上的安装问题
- 【原创】中文分词系统 ICTCLAS2015 的JAVA封装和多线程执行(附代码)
- 20160126--springaop
- android-服务Service
- WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿
- ios移动端原生滚动条滚动不灵敏问题
- TestNG Suite 运行出现中文乱码如何解决
- base64加密解密c++代码
- 移动端页面返回,数据不刷新bug解决
- rails 部署 can't find gem bundler (>;= 0.a) with executable bundle
- 【Python】【持续项目】Python-安全项目搜集
- 常用的OpenCV函数速查
- 按示例学python:使用python抓取网页正文
- NOIP 初赛笔记