DIP,IoC与DI概念解析

依赖倒置
DIP(Dependency Inversion Principle)

DIP的两大原则:
1、高层模块不应该依赖于低层模块,二者都应该依赖于抽象。
2、抽象不应该依赖于细节,细节应该依赖于抽象。

具体来讲,依赖倒置的核心思想是针对接口而不是实现编程。
应用DIP可以降低模块之间的耦合度,只要接口保持稳定,模块可以独立演化而互不影响。

控制反转
IoC(Inversion of Control)

通常情况下,class A依赖于class B,或者应用DIP之后依赖于Interface B,那么在运行时,我们必须自行主动的去实例化Interface B接口的实现类实例,然后将其引用传递给Class A,在传统的编程模型下,我们经常这样干。这样耦合度仍然很高,我们必须知道所依赖的实现类的一些细节。

而IoC则是将实例化被依赖模块的责任交出去,不再主动去做依赖装配工作,这样我们就可以彻底的只针对接口编程,而无需关心具体的实现。
IoC容器成为一个系统的对象容器和粘合剂,它负责创建对象的实例,并按照它们声明的依赖关系把它们粘合起来共同工作。通过配置文件或注解的方法,IoC容器会自动的满足模块之间的依赖关系,而无需我们再主动去处理依赖关系,只要被动接受就可以了。

这种依赖关系的满足由主动实现到被动接受的转变,就是所谓的控制反转了。
IoC与好莱坞原则(Don't call me,i'll call you!)比较相似。

依赖注入
DI(Dependency Injection)

依赖注入是实现控制反转的主要方式,另一种方式是依赖查找。

两者的区别在于,依赖注入是被动的接收对象,而依赖查找是主动索取响应名称的对象,获得依赖对象的时间也可以在代码中自由控制。依赖查找更加主动,在需要的时候通过调用框架提供的方法来获取对象,获取时需要提供相关的配置文件路径、key等信息来确定获取对象的状态。比如使用JNDI来查找资源。

依赖注入有以下几种实现方式:
1、接口注入或叫Type 1型注入。需要实现特定接口以供外部容器注入所依赖类型的对象。这里有一个写的比较好的例子。这种注入方式很少用到。
2、setter注入或叫Type 2型注入。实现特定属性的public set方法,来让外部容器调用传入所依赖类型的对象。这种注入方式是最常见的。
3、构造函数注入或叫Type 3型注入。实现特定参数的构造函数,在新建对象时传入所依赖类型的对象。
4、注解注入。基于Java的注解功能,在私有变量前加“@Autowired”等注解,不需要显式的定义以上三种代码,便可以让外部容器传入对应的对象。该方案相当于定义了public的set方法,但是因为没有真正的set方法,从而不会为了实现依赖注入导致暴露了不该暴露的接口(因为set方法只想让容器访问来注入而并不希望其他依赖此类的对象访问)。注解注入是比较好的注入实现方式。

总的来讲,依赖倒置(DIP)是一种设计原则,控制反转(IoC)是一种处理对象间依赖关系的方式,与传统的主动方式正好相反,而依赖注入(DI)则是IoC容器实现控制反转的主要方式。

依赖倒置(DIP),控制反转(IoC)与依赖注入(DI)相关推荐

  1. 依赖倒置、控制反转、依赖注入

    实现依赖倒置.控制反转.依赖注入的核心思想是:接口驱动 接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性,实现模块之间的解耦等等. 参考资料:https://www.cnblogs ...

  2. 架构设计之依赖倒置、控制反转与依赖注入

    名词解释 依赖:一种模型元素之间的关系的描述.例如类A调用了类B,那么我们说类A依赖于类B. 耦合:一种模型元素之间的关系的描述.例如类A调用了类B或类B调用了类A,那么我们说类A与类B有耦合关系. ...

  3. 控制反转IOC与依赖注入DI

    为什么80%的码农都做不了架构师?>>>    1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最 ...

  4. java-12:spring MVC - 控制反转IOC,依赖注入DI

    学习spring框架之前,先理解几个概念: 1.第一部分:依赖倒置原则 2.第二部分:控制反转,控制反转容器(实例) 3.第三部分:控制反转,控制反转容器(全面理解,面试题) 综合性理解:控制反转(I ...

  5. 控制反转(Ioc)和依赖注入(DI)

    控制反转IOC, 全称 "Inversion of Control".依赖注入DI, 全称 "Dependency Injection". 面向的问题:软件开发 ...

  6. 控制反转(IoC)与依赖注入(DI)详解

    文章目录 什么是控制反转(IoC) 控制反转(IoC)有什么作用 控制反转(IoC)是怎么分类的 依赖注入 接口注入 Setter方法注入 构造器注入 依赖查找 上下文依赖查找(Contextuali ...

  7. 控制反转IOC、依赖注入DI的详细说明与举例

    文章目录 引入 IOC介绍 IOC的实现 通过构造函数注入依赖 通过 setter 设值方法注入依赖 依赖注入容器 IOC优缺点 优点 缺点 阅读时忽略语言差异,参考了很多其他博主内容,参考博文在最后 ...

  8. Spring_01 spring容器、控制反转(IOC)、依赖注入(DI)

    目录 1 什么是spring框架 2 spring框架的特点 3 spring容器 3.1 什么是spring容器 3.2 spring容器创建对象的编程步骤 3.4 spring容器创建对象的方式 ...

  9. 控制反转 IOC 与依赖注入 DI

    引言 简单总结和巩固一下spring的核心原理--IOC和DI的概念,为什么IOC要叫控制反转?IOC和DI的关系是怎样的? 一.IOC 控制反转 初学者可能很好奇,为什么spring framewo ...

最新文章

  1. C++——创建类的时候用new与不用new 的区别(转)
  2. Excel随机选取指定数据
  3. android消息池,回转寿司你一定吃过!——Android消息机制(构造)
  4. awk对某个字段分割处理
  5. DateChooser ASP.NET 2.0版 之实用版
  6. 九章算法班L3 Dynamic Programming Ⅰ
  7. 02.analyzer-tokenizer
  8. Intellij IDEA 新建一个EJB工程(三)
  9. SpringBoot整合Shiro实现登录认证和授权CHCache
  10. 杜克大学教授:提高学术写作水平的10条建议!
  11. python 散点图 分类_Python | 分类图
  12. Oracle PL/SQL开发基础(第十五弹:同义词)
  13. python 日本 地图 热力图_python 在百度地图上画热力图
  14. Problem D 牛栏(aggr)
  15. jfreechart-x轴刻度倾斜45度
  16. 树莓派源码安装glib
  17. 铁甲小宝像车轮的是什么机器人_铁甲小宝里所有机器人的名字和绝招
  18. Pyhton3 下载Telegram 频道数据
  19. 记一次带宽跑满服务器卡死事故处理
  20. 腾讯云点播服务端API

热门文章

  1. 【Java 并发编程】线程池机制 ( 线程池阻塞队列 | 线程池拒绝策略 | 使用 ThreadPoolExecutor 自定义线程池参数 )
  2. 【设计模式】代理模式 ( 动态代理 )
  3. 【错误记录】应用运行 CPU 占用率达到 90% ( 使用 CPU Profiler 监控应用运行情况 )
  4. 【Unity 3D 游戏开发】Unity3D 入门 - 工作区域介绍 与 入门示例
  5. python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式...
  6. selenium-webdriver(python) (十六) --unittest 框架
  7. map/set/object/array对比
  8. KB2533623 下载
  9. [Android]动态加载/热部署框架汇总
  10. win32 去掉窗口边框