更新時間:2022-09-05 09:55:11 來源:動力節(jié)點(diǎn) 瀏覽2178次
在Java教程中大家會學(xué)到很多知識,那么,什么是ioc?動力節(jié)點(diǎn)小編來為大家簡單介紹一下。
IOC是Inversion of Control的縮寫,多數(shù)書籍翻譯成“控制反轉(zhuǎn)”。
1996年,Michael Mattson在一篇有關(guān)探討面向?qū)ο罂蚣艿奈恼轮校紫忍岢隽薎OC 這個概念。對于面向?qū)ο笤O(shè)計(jì)及編程的基本思想,前面我們已經(jīng)講了很多了,不再贅述,簡單來說就是把復(fù)雜系統(tǒng)分解成相互合作的對象,這些對象類通過封裝以后,內(nèi)部實(shí)現(xiàn)對外部是透明的,從而降低了解決問題的復(fù)雜度,而且可以靈活地被重用和擴(kuò)展。
2004年,Martin Fowler探討了同一個問題,既然IOC是控制反轉(zhuǎn),那么到底是“哪些方面的控制被反轉(zhuǎn)了呢?”,經(jīng)過詳細(xì)地分析和論證后,他得出了答案:“獲得依賴對象的過程被反轉(zhuǎn)了”。控制被反轉(zhuǎn)之后,獲得依賴對象的過程由自身管理變?yōu)榱擞蒊OC容器主動注入。于是,他給“控制反轉(zhuǎn)”取了一個更合適的名字叫做“依賴注入(Dependency Injection)”。他的這個答案,實(shí)際上給出了實(shí)現(xiàn)IOC的方法:注入。所謂依賴注入,就是由IOC容器在運(yùn)行期間,動態(tài)地將某種依賴關(guān)系注入到對象之中。
所以,依賴注入(DI)和控制反轉(zhuǎn)(IOC)是從不同的角度的描述的同一件事情,就是指通過引入IOC容器,利用依賴關(guān)系注入的方式,實(shí)現(xiàn)對象之間的解耦。
IOC中最基本的技術(shù)就是“反射(Reflection)”編程,目前.Net C#、Java和PHP5等語言均支持,其中PHP5的技術(shù)書籍中,有時候也被翻譯成“映射”。有關(guān)反射的概念和用法,大家應(yīng)該都很清楚,通俗來講就是根據(jù)給出的類名(字符串方式)來動態(tài)地生成對象。這種編程方式可以讓對象在生成時才決定到底是哪一種對象。反射的應(yīng)用是很廣泛的,很多的成熟的框架,比如象Java中的Hibernate、Spring框架,.Net中 NHibernate、Spring.Net框架都是把“反射”做為最基本的技術(shù)手段。
Sun ONE技術(shù)體系下的IOC容器有:輕量級的有Spring、Guice、Pico Container、Avalon、HiveMind;重量級的有EJB;不輕不重的有JBoss,Jdon等等。Spring框架作為Java開發(fā)中SSH(Struts、Spring、Hibernate)三劍客之一,大中小項(xiàng)目中都有使用,非常成熟,應(yīng)用廣泛,EJB在關(guān)鍵性的工業(yè)級項(xiàng)目中也被使用,比如某些電信業(yè)務(wù)。
.Net技術(shù)體系下的IOC容器有:Spring.Net、Castle等等。Spring.Net是從Java的Spring移植過來的IOC容器,Castle的IOC容器就是Windsor部分。它們均是輕量級的框架,比較成熟,其中Spring.Net已經(jīng)被廣泛應(yīng)用于各種項(xiàng)目中。
初級 202925
初級 203221
初級 202629
初級 203743