控制反转和依赖注入

控制反转(Inversion of Control)

一种面向对象的设计原则,降低计算机代码之间的耦合度

基本思想

借助于第三方(即IOC容器)来实现具有依赖关系的对象之间的解耦

  • 谁控制谁,控制什么:
  • 谁控制谁:
    由IoC容器来控制对象
  • 控制什么:
    IoC容器主要控制了被控制对象的外部资源的获取,包括依赖对象,文件,常量数据等
  • 控制反转反转的是什么:
  • 正转:
    传统J2SE中,是在对象中主动去直接获取依赖的对象和资源
  • 反转:
    由容器来负责创建和注入依赖对象,故而对象从传统的主动获取变成了控制反转后的被动接受
  • 反转了依赖对象和资源的获取

IoC能做什么

IoC容器负责控制以来对象的创建和查找,由容器进行组合对象,对象之间是松耦合的
IoC带来的最大的变化是思想上发生了主从换位的变化,将应用程序由传统的主动获取变化为被动等待


依赖注入(Dependency Injection)

原理概述

  • 高端描述:

组件之间依赖关系由容器在运行期决定,即由容器动态的将某个依赖关系注入到组建之中。

  • 接地气版:

依赖注入就是将实例变量传入到一个对象中去
含参的构造函数初始化就是依赖注入思想的一种体现,将被依赖的实例变量通过参数的方式传入,从而降低了耦合度

拆解分析:

  • 谁依赖于谁:

应用程序依赖于IoC容器

  • 为什么需要依赖:

应用程序需要IoC容器来提供程序内对象所需要的外部资源

  • 谁注入了谁:

IoC容器注入了应用程序中的对象

  • 注入了什么:

应用程序对象所需要的外部资源(依赖对象,常量数据等)


控制反转和依赖注入的关系

  • 来自ITEYE某技术牛人的博客:

“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

  • W3Cschool中Spring教程中的内容:(个人比较倾向这种说法)

控制反转是一种思想
依赖注入是一种设计模式
依赖注入是控制反转的一种实现方式,控制反转同样具有其他的实现方式

总结

  1. 控制反转是一种在软件工程中解耦合的思想,调用类只依赖接口,而不依赖具体的实现类,减少了耦合。控制权交给了容器,在运行的时候才由容器决定将具体的实现动态的“注入”到调用类的对象中。
  2. 依赖注入是一种设计模式,可以作为控制反转的一种实现方式。依赖注入就是将实例变量传入到一个对象中去(Dependency injection means giving an object its instance variables)。
  3. 通过IoC框架,类A依赖类B的强耦合关系可以在运行时通过容器建立,也就是说把创建B实例的工作移交给容器,类A只管使用就可以。

你可能感兴趣的:(控制反转和依赖注入)