自己对IOC的理解

今天有幸研究一下IOC的相关知识。以前总是听别人再说IOC怎么怎么样好,怎么怎么用之类的,而自己听着也是一个什么都不懂的小白。
     上网查了一些关于IOC的知识,关于大牛的说法自己在此记录一下自己的理解。
   IOC 是什么?
  Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:


  ●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。


  ●为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。



        自己的理解:IOC翻译过来说是“控制反转”,但是在我自己开来,它更应该说成是“控制改变”,因为我自己理解“反转”的时候总是认为,原先是A控制B的,而现在反转了,就应该是B控制A了。其实从以上的说明中,不难看出IOC不是这个意思。而是,通过引出一个第三方的对象C,通过C来实现A和B的沟通。至于A什么时候需要B,或者B什么时候需要A,A或B自己本身不需要清楚,它需要做的就是告诉那个第三者C,所有的事情都由C来完成。包括什么时候实例化B,什么时候提供给A,B对象什么时候就没有存在的必要了,然后从内存中销毁等等。这一切都交给了一个C来完成。当然,C可以做的不只是两个对象之间的沟通,所以这个C就是我们这里所说的IOC容器。

IOC能做什么?

  IoC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。


  其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。


  IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

    自己的理解:看到这里的时候我突然想到一个比较合适的例子(之前想了很久,但是也不知道这个像什么中的哪一个情形),我们之前的编程开发方式就像我们在家吃饭一样,我们想吃什么菜,吃啥饭都需要我们自己去亲自做,然后才能慢慢的享用,而IOC就像我们在饭店吃饭一样,我们想吃什么想喝什么,都不需要我们自己去厨房操刀下厨,我们需要做的就是告诉厨师我们想要什么和怎么吃,至于我们想吃的饭菜什么时候到,怎么做那不再需要我们去操心了。
DI
简单的讲就是“依赖注入”,个人觉得这个此用的还是挺形象的,在IOC中,最神奇的也就是这个了。因为我们之前都知道怎么使用另一个对象,但是对于怎么被动接受这个对象一直是比较难懂的了。而这个就是DI(依赖注入)了。其实这个和IOC是一个东西了,只是描述的角度不一样了。IOC说的是这种思想是什么,而DI说的是这种思想怎么用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值