您的位置:首页 > 其它

控制反转(IoC)以及依赖注入(DI)的解释

2016-11-10 16:54 351 查看
理解IoC和DI对于Spring的初学者来说是很重要的.

刚开始接触到这两个词感觉过于抽象实在难懂,会有很多问题产生,什么叫反转?什么是依赖关系,啥又叫注入?

程序员都是懒惰和高冷的

记住这句话,因此一个纯粹的程序员都会想方设法让自己的代码变得简洁,并且后期修改的时候花费少量的精力,同时不是自己的事理都不理。

灵感都来源于生活,所以先用生活中的例子来解释所谓的"控制反转"和"依赖注入".

Ioc—Inversion of Control,即"控制反转"

既然有反转,那么正转又是什么呢?比如你现在是刚起步的小公司的boss,你现在需要找java工程师,现在找职员的控制权在你的手上,你找到一个Mr.zz给你打工。那么你和Mr.zz就产生了依赖关系(你当然要依赖Mr.zz给你搞事情啊),一段时间后Mr.zz挂了,你又得自己去找一个Mr.xx.

这就是所谓正转,在程序设计中,就是指程序主动的去创建依赖对象(你主动的去找Mr.zz).

此时身为boss的你就暴躁了,我才是老大,为啥要我亲自找人搞事情啊。于是你找到一个中介,他负责给你找你想要的人,挂了就找他换,你再也不用操心职员的事情,也就是说你把找职员的控制权反而交给中介去处理。这就叫控制反转,这样也能很好的理解好莱坞法则"Don't call us,we will call you."(不要去找职员们,他们会自动来找你).即告诉开发者不要主动去构建依赖对象,而是在需要的时候由依赖注入容器把对象提供过来。

DI—Dependency Injection,即"依赖注入"

依赖注入实际上是控制反转的另一种体现,不同角度的说法而已,中介啥时候找工程师,怎么找工程师,我都不需要知道。当我需要的时候就联系中介,中介就给我一个我需要的职员。

拿操作数据库来说:比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了spring(中介)我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。

理解DI的关键是:"谁依赖谁,为什么需要依赖,谁注入谁,注入了什么?"。

谁依赖于谁:应用程序依赖于IoC容器(boss依赖中介);

为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源(boss需要中介提供职员,这个职员拥有某种技能,那么职员的技能对于boss来说就是一种外部资源);

谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象(中介把职员注入到boss公司)

注入了什么:就是注入某个对象所需要的外部资源,包括对象、资源、常量数据(把职员注入到公司,自然而然就获取的职员的技能).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: