在写这篇文章之前,xxx已经写过了几篇关于改对象容器主题的文章,想要了解的朋友可以去翻一下之前的文章
IoC,Inversion Of Control 即制控转反,由容器来管理务业对象之间的赖依关系,而非传统方法中的由代码来管理。
其本质,即将制控权由应用程序代码转到了外部容器,制控权的转移就是所谓的转反,其带来的大最的处好是降低了务业对象之间的赖依度程,即实现了解耦。
Spring的IoC容器重要应用DI(Dependency Injection,赖依注入)方法实现的。不要需自动查找,对象的查找、位定和创立部全由容器管理,容器会将合符赖依关系的对象通过性属(setter等)或者构造函数传递给要需的对象。
应用IoC可以带来以下处好:
1、询查赖依操作和应用代码分离,量大减少了Factory和Singleton的量数,使代码层次更加清晰,重要原因是我们不再查找、位定、创立和管理对象之间的赖依关系了,都交给IoC容器管理了
2、没有侵入性,不要需赖依容器的API,也不要需实现一些特别接口。这样我们的受控对象可以搬出容器进而独单应用。
3、可以从IoC容器中直接取得一个对象然后直接应用,而无需斟酌对象的创立程过。(厂工模式)
从网上看了一个例子,认为不错,贴过来帮助我们懂得:
我们是如何找女朋友的?见常的情况是,我们到处去看哪里有长得亮漂材身又好的mm,然后探听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法识认她们,投其所好送其所要,然后嘿嘿……这个程过是杂复奥深的,我们必须自己计设和对面每一个环节。传统的程序开发也是如此,在一个对象中,如果要应用另外的对象,就必须失掉它(自己new一个,或者从JNDI中询查一个),应用完后之还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。 那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个者三第:婚姻介绍所。婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告知它我想找个什么样的女朋友,比如长得像李嘉欣,材身像林熙雷,唱歌像周杰伦,度速像卡洛斯,技巧像齐达内之类的,然后婚介就会按照我们的要求,供提一个mm,我们只要需去和她谈恋爱、完婚了行就。简单明了,如果婚介给我们的人选不合符要求,我们就会抛出异常。整个程过不再由我自己制控,而是有婚介这样一个似类容器的机构来制控。Spring所导倡的开发方法就是如此,部全的类都会在spring容器中记登,告知spring你是个什么西东,你要需什么西东,然后spring会在统系运行到恰当的时候,把你要的西东自动给你,同时也把你交给其他要需你的西东。部全的类的创立、销毁都由 spring来制控,也就是说制控对象生存周期的不再是引用它的对象,而是spring。对于某个详细的对象而言,之前是它制控其他对象,现在是部全对象都被spring制控,所以这叫制控转反
其实,我们可以把IoC看作是厂工模式的升华,IoC好比是一个大厂工,只不过在这个大厂工里成生的对象都是在XML文件中义定的,然后利用Java的射反实例化。在没有Spring之前我们也是这么做的,只是Spring的IoC更加壮大完善。
利有就有毙,IoC也有定一的弊病:
1、应用射反酿成,在效率上有些损耗。
2、缺少更加智能的IDE,写XML中时,错误不容易暴露,推迟到运行期才能发明。
但于对相IoC进步的维护性和灵活性说来,这点点缺又显得眇乎小哉
写到最后,忽然想到《走遍美国》里,唱片公司制片在rebaca制录完唱片后对她说的一句话:Don't call us,we'll call you
用这句话来描述IoC再适合不过。
文章结束给大家分享下程序员的一些笑话语录:
AdobeFlash拖垮Windows拖垮IE!又拖垮Linux拖垮Ubuntu拖垮FirxEox!还拖垮BSD拖垮MacOS拖垮Safri!简直无所不拖!AdobeFlash滚出网路世界!不要以为市占有率高就可以持续出烂货产品!以后替代品多得是!