Java IoC(控制反转)/DI(依赖注入)

来源:互联网 发布:手机记牌器软件 2016 编辑:程序博客网 时间:2024/05/22 08:08

控制反转 Inversion of Control

    控制反转不是什么技术而是一种思想,将设计好的对象交给容器控制,而不是像传统那样由对象内部控制;首先要明确“谁控制谁,控制什么,为什么叫反转,哪些反转了

  1. 谁控制谁:Ioc容器控制对象
  2. 控制什么:控制外部资源获取和对象实例的创建
  3. 为什么叫反转:由容器来帮忙创建及注入依赖对象
        注释:考虑一下常规情况下的应用程序,如果要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是说,是在A类中主动去获取所需要的外部资源C,这种情况被称为正向的。那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IoC的容器获取一个C的实例,然后反向的注入到A类中。
  4. 哪些反转了:依赖对象的获取反转了

依赖注入 Dependency Injection

    组件之间的依赖关系是由容器在运行期决定的,要明确“谁依赖谁,为什么需要依赖,谁注入谁,注入什么

  1. 谁依赖谁:应用程序(某个对象)依赖Ioc容器
  2. 为什么需要依赖:应用程序需要Ioc容器提供需要的外部资源
  3. 谁注入谁:Ioc容器注入应用程序的某个对象,就是应用程序依赖的对象
  4. 注入什么:注入某个对象需要的外部资源

控制反转和依赖注入概念梳理: 根据上面描述,不难看出,依赖注入和控制反转只是从不同角度来描述,依赖注入是从应用程序角度在描述:是应用程序依赖容器创建并且注入他所需要的外部资源;控制反转是从容器角度在描述:容器控制应用程序,由容器反向响应用程序注入所需要的外部资源。

小结:其实IoC/DI对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC/DI容器来创建并注入它所需要的资源了,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活

原创粉丝点击