IoC(Inversion of Control):控制反转。
DI(Dependency Injection):依赖注入。

控制反转是目的,依赖注入是实现控制反转的手段。

控制反转是一种面向对象的思想,它是一种宽泛的概念,只要一个类将对它内部状态的控制权交由其他机制去完成即为『控制反转』。控制反转是为了降低类与类之间的耦合度。

而Spring采用依赖注入这一具体的手段来达到控制反转的目的

依赖注入的做法是:将被依赖对象的创建与维护工作交由专门的机构,而依赖类中只需要声明所需要的成员变量。
也就是说,依赖类原本需要主动去获取对象,但采用依赖注入后对象由第三方机构提供,自己仅需声明需要什么对象即可。
这样做的目的就是为了降低两个类之间的耦合程度。
PS:在Spring中,那个创建、管理对象的机构就称为『IoC Service Provider』。

但此时还没体现出依赖注入能降低耦合度这一点,只有当依赖注入与面向接口编程结合起来,才能真正发挥依赖注入的优势。接下来先介绍一下『面向接口编程』。

面向接口编程

若某一类服务有多种不同的实现,我们需要抽象出一个接口,并在接口中定义一套API。在使用时声明接口类型变量,并用实现类的对象赋值。接下来通过接口类型的变量调用服务即可。当功能发生变化时,仅需替换实现类即可

在面向接口编程的基础上使用依赖注入的好处
上述过程如果要换一种实现,就必须要修改A类的代码,再重新编译。而使用了依赖注入后,由于依赖类不需要自己创建维护被依赖对象,该过程由IoC Service Provider完成。因此,当需要替换实现类时,只需在IoC Service Provider中修改,被依赖类、依赖类都不会受到影响,此时这两个类是松耦合的。

作者:大闲人柴毛毛
链接:https://www.zhihu.com/question/23277575/answer/247023315
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最新文章

  1. Entity Framework 6 Recipes 2nd Edition(10-8)译 - >映射插入、修改、删除操作到存储过程
  2. sqlserver锁表、解锁、查看销表 (转载)
  3. Qt与VC编程合作起龌龊
  4. SharePoint Error:a system restart from a previous installation or update is pending
  5. BZOJ3994: [SDOI2015]约数个数和
  6. Solution multisite htaccess cleanURL
  7. memcached在windows7上的安装问题
  8. 【原创】中文分词系统 ICTCLAS2015 的JAVA封装和多线程执行(附代码)
  9. 20160126--springaop
  10. android-服务Service
  11. WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿
  12. ios移动端原生滚动条滚动不灵敏问题
  13. TestNG Suite 运行出现中文乱码如何解决
  14. base64加密解密c++代码
  15. 移动端页面返回,数据不刷新bug解决
  16. rails 部署 can't find gem bundler (>= 0.a) with executable bundle
  17. 【Python】【持续项目】Python-安全项目搜集
  18. 常用的OpenCV函数速查
  19. 按示例学python:使用python抓取网页正文
  20. NOIP 初赛笔记

热门文章

  1. neo4j开发自定义存储过程注意事项
  2. npm 关联 git包
  3. 项目常用的几个mysql函数
  4. jqery实现10X10的表格,双击消失
  5. CSS的四种定位的参照物
  6. 使用CXF开发WebService程序的总结(五):基于Map数据类型处理的的客户端和服务端代码的编写
  7. 对应关系,以及Module作用
  8. Delphi 循环语句和程序的循环结构
  9. Java函数优雅之道
  10. ARM工作模式寻址