标签:dependency ioc 好记性不如烂笔头 spring
学习spring,不可避免就要学习IoC和DI(控制反转和依赖注入)。这些名词总是那么拗口。
首先我们要明白IoC/DI干嘛用的,不然别人问,
“老范,茴香豆的“茴”字有那三种写法,你知道么?”
“老范,IoC的名称有几种说法,你知道么?”
“老范,IoC是干什么用的,你知道么?”
……
IoC(Inversion of Control,控制反转),DI(Dependency Injection,依赖注入)
其实IoC/DI的作用就两个字——解耦,说一千道一万,还是离不开这两个字。所以,IoC/DI的作用就是解耦。把紧耦合的逻辑,最终变成松耦合的结构。
所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。
一个经典的关于IoC的比喻
举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、………,想办法认识她们,投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的,我们必须自己设计和面对每个环节。
传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,比如长得像李嘉欣,身材像林熙雷,唱歌像周杰伦,速度像卡洛斯,技术像齐达内之类的,然后婚介就会按照我们的要求,提供一个mm,我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。
个人觉的这个比喻非常好,但是有的细节上不够完美,但是关于销毁这一段,感觉有点牵强,自己决定来写一个比喻。
阿饭同学的关于IoC的比喻
阿饭同学想要去买股票?常见的情况是,阿饭同学首先要知道有股票这个东西,然后要去了解这些股票后面对应的公司,这些公司是做什么的,经营情况如何,毛利率有多少,净资产有多少…,然后要在一大堆的股票当中,挑选自己觉的合适的,我们必须自己查阅、分析、检验每个环节。
传统的程序开发也是类似,我们首先考虑我们做一个什么样的功能,需要用到哪些技术,我们要去一大堆技术中挑选一个合适的,如果我们需要使用一个对象,我就必须得到它(买入某一个股票),如果这个对象是长期存在的,那么阿饭同学就要长期保持这个对象(长期持股),如果这个对象是短期的,那么阿饭同学就要把这个对象销毁(卖出这个股票)。
而IoC就好比基金,如果阿饭同学觉的中国的“高端制造”有前途,那么就不用分析大量的股票了,只要买入对应的“高端制造”基金;如果阿饭同学觉的蓝天碧水才是中国梦,那么就直接买入“清洁能源”基金就可以了。
如果基金无法提供给我们合适的种类,我们就会抛出异常(就不购买基金)。
购买之后,整个过程不再由我自己控制,而是有基金公司这样一个类似容器的机构来控制。
好记性不如烂笔头87-spring3学习(8)-IoC的理解和比喻
标签:dependency ioc 好记性不如烂笔头 spring
原文地址:http://blog.csdn.net/ffm83/article/details/44456281