Spring学习之IOC/DI的诠释

在网上看到一篇对IOC和ID解释很好的文章,自己记录下,地址倒是忘记了,凭自己的记忆重新整理巩固一遍,好像我收藏了那篇文章了

IOC(Inversion of Control  控制反转
DI(Dependency Injection   依赖注入


之前对IOC/DI的理解就模棱两可,今天算有点理解了,从一下几个方面入手

控制:谁控制谁,控制ta的什么
反转:有反转应该就有正向,正向应该是怎样的
依赖:谁依赖谁,为什么需要依赖
注入:谁向谁注入,注入什么


关于以上四个问题涉及到的参与者是谁?

三方参与者:某一对象(任意的,普通的java对象),IOC/DI容器,对象所需的外部资源(另一对象,或者是文件资源等对象所需的,从外部获得的).

谁控制谁:IOC/DI容器控制对象

控制什么:控制对象的创建

谁依赖谁:对象依赖IOC/DI容器

为什么要依赖:需要IOC/DI容器提供对象所需的外部资源

谁向谁注入:IOC/ID容器像对象注入

注入什么:注入对象所需要的外部资源

正向和反转:
我们常规的编程,如果在A里面使用C,我们会在A中直接创建一个C对象.也就是在A
           中主动去获取所需的外部资源,这样的被称为正向!而反转就是A不需要主动的去
           创建C对象,而是被动的等待,等待IOC/DI容器获取C的实例,反向的注入到A中

所以控制反转和依赖注入是对同一件事情的不同描述,从某方面来讲,他们描述的角度不同.控制反转是站在容器的角度来讲,容器控制应用程序,反向的向程序中注入所需的外部资源.而依赖注入是站在程序的角度,程序依赖容器注入所需的外部资源!


其实这与工厂模式有点类似,如果A需要外部资源,自己不去创建,而是依靠工厂来创建

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

猜你喜欢

转载自lijie-insist.iteye.com/blog/2187107
今日推荐