IoC 簡(jiǎn)介:A Brief Introduction to IoC[讀后感]
Posted on 2007-03-21 21:23 chenweicai 閱讀(114) 評(píng)論(0) 編輯 收藏反向控制? Inversion Of Control : 其實(shí)就是把控制權(quán)從程序轉(zhuǎn)到框架或者容器
依賴(lài)注射 Dependency Injection : 就是把配置和程序分離
個(gè)人感覺(jué): 就是通過(guò)配置初始化對(duì)象,可以方面的加載不同的實(shí)現(xiàn)
???????????????? 達(dá)到通過(guò)配置將控制和實(shí)現(xiàn)分離的目的
當(dāng)前使用IoC概念的lightweight框架
????? Avalon, Spring?, PicoContainer
??????好像還有Hive之類(lèi)的,不過(guò)沒(méi)有接觸過(guò)
這篇文章是講解IoC最經(jīng)典的文章之一,我打印了一份 還不錯(cuò) 向 Martin Fowler(馬丁 服了)致敬
?????Inversion of Control Containers and the Dependency Injection Pattern
文章說(shuō)IoC不是一個(gè)新概念了,其實(shí)這個(gè)概念就是?依賴(lài)反轉(zhuǎn)原則的同義詞 文章見(jiàn)下面的鏈接
?????Dependency Inversion Principle (PDF file)
????看來(lái)萬(wàn)物相通的道理是正確的 ,不過(guò)實(shí)現(xiàn)和應(yīng)用千差萬(wàn)別
下面說(shuō)一下IoC的三種模型
????其實(shí) 叫Type1 Type2 Type3也沒(méi)什么不好,不過(guò)就是不大好記憶其真實(shí)含義
????所以“馬丁服了”都分別給了新的名稱(chēng)?
?
????Type1?接口注射 Interface Injection
????????在IoC之前這種模式就已經(jīng)應(yīng)用了,其實(shí)原理就是你實(shí)現(xiàn)了某個(gè)接口,然后框架會(huì)去主動(dòng)的調(diào)用它
????????其實(shí)自定義的Servlet運(yùn)行就比較象這種模式
????????現(xiàn)在只有?Avalon? 支持這種模式
????Type2 設(shè)值注射 Setter Injection
?????????使用Bean的Setter方面進(jìn)行初始化
???????? 好處之一就是可以很方面的進(jìn)行junit測(cè)試,因?yàn)橹灰S便換一個(gè)配置文件,就可以進(jìn)行各種配置的測(cè)試了(Spring是這樣)
????????不好的地方在于Spring要求暴露Setter和Getter方法,一般屬性就沒(méi)有辦法隱藏起來(lái)
????????????馬丁服了? 建議使用 set***Init()的方法使用這個(gè)模式,不過(guò)我覺(jué)得比較麻煩
????Type3 構(gòu)造注射 Construtor Injection
????????這個(gè)模式來(lái)源于 "Good Citizen."?模式(沒(méi)有聽(tīng)過(guò),不過(guò)猜想是可以保證城市里面配套設(shè)施齊全,呵呵....)
????????真正的意思是保證對(duì)象在創(chuàng)建的時(shí)候就是完整有效的,可以杜絕Setter Injection帶來(lái)的暴露屬性問(wèn)題
????????不過(guò)這個(gè)模式也有一個(gè)問(wèn)題就是類(lèi)的繼承,會(huì)導(dǎo)致一些復(fù)雜的設(shè)計(jì)
????????而且一般來(lái)說(shuō)一個(gè)類(lèi)的構(gòu)造方法可能不僅僅是初始化對(duì)象,還包含其它的目的,所以還是有選擇性的使用比較好?
????順便說(shuō)一下DAO模式
???????? Sun's Pattern Catalog?以后可以看看,現(xiàn)在還沒(méi)有時(shí)間看

???????像普通的Bean一樣定義訪問(wèn)數(shù)據(jù)的方法,不過(guò)訪問(wèn)是通過(guò)一個(gè)抽象的數(shù)據(jù)訪問(wèn)對(duì)象實(shí)現(xiàn)的(abstract Data Access Object)
Spring 和 PicoContainer的區(qū)別
????先說(shuō)一下pico的意思 :兆分之一 意思是這個(gè)容器特別特別小,意思它是最小的,呵呵 ,這樣才符合lightWeight容器的概念
????有點(diǎn)變態(tài)......
????言歸正傳
????Spring可以使用xml配置綁定也可以直接通過(guò)java訪問(wèn)
????picoContainer則只可以通過(guò)java綁定( PicoExtras 項(xiàng)目提供了pico綁定xml的支持)
????不過(guò)現(xiàn)在N多框架和開(kāi)源項(xiàng)目都使用Xml作配置,維護(hù)起來(lái)也很頭疼,雖然叫做good taste ,但也好不到哪去
????pico相對(duì)sring更為lightweight,但對(duì)其他項(xiàng)目的支持比較弱,比如hibernate
????而且spring不僅僅提供了IoC,更提供了Aop的支持
????不過(guò)有關(guān)Aop的支持,可以考慮使用 AspectWerkz or AspectJ.?
????這兩個(gè)都支持Constructor Injection,但只有Spring支持Setter Injection,所以選擇后者只有Spring這個(gè)唯一的選擇(翻譯的比較拗口)
依賴(lài)注射 Dependency Injection : 就是把配置和程序分離
個(gè)人感覺(jué): 就是通過(guò)配置初始化對(duì)象,可以方面的加載不同的實(shí)現(xiàn)
???????????????? 達(dá)到通過(guò)配置將控制和實(shí)現(xiàn)分離的目的
當(dāng)前使用IoC概念的lightweight框架
????? Avalon, Spring?, PicoContainer
??????好像還有Hive之類(lèi)的,不過(guò)沒(méi)有接觸過(guò)
這篇文章是講解IoC最經(jīng)典的文章之一,我打印了一份 還不錯(cuò) 向 Martin Fowler(馬丁 服了)致敬
?????Inversion of Control Containers and the Dependency Injection Pattern
文章說(shuō)IoC不是一個(gè)新概念了,其實(shí)這個(gè)概念就是?依賴(lài)反轉(zhuǎn)原則的同義詞 文章見(jiàn)下面的鏈接
?????Dependency Inversion Principle (PDF file)
????看來(lái)萬(wàn)物相通的道理是正確的 ,不過(guò)實(shí)現(xiàn)和應(yīng)用千差萬(wàn)別
下面說(shuō)一下IoC的三種模型
????其實(shí) 叫Type1 Type2 Type3也沒(méi)什么不好,不過(guò)就是不大好記憶其真實(shí)含義
????所以“馬丁服了”都分別給了新的名稱(chēng)?
?
????Type1?接口注射 Interface Injection
????????在IoC之前這種模式就已經(jīng)應(yīng)用了,其實(shí)原理就是你實(shí)現(xiàn)了某個(gè)接口,然后框架會(huì)去主動(dòng)的調(diào)用它
????????其實(shí)自定義的Servlet運(yùn)行就比較象這種模式
????????現(xiàn)在只有?Avalon? 支持這種模式
????Type2 設(shè)值注射 Setter Injection
?????????使用Bean的Setter方面進(jìn)行初始化
???????? 好處之一就是可以很方面的進(jìn)行junit測(cè)試,因?yàn)橹灰S便換一個(gè)配置文件,就可以進(jìn)行各種配置的測(cè)試了(Spring是這樣)
????????不好的地方在于Spring要求暴露Setter和Getter方法,一般屬性就沒(méi)有辦法隱藏起來(lái)
????????????馬丁服了? 建議使用 set***Init()的方法使用這個(gè)模式,不過(guò)我覺(jué)得比較麻煩
????Type3 構(gòu)造注射 Construtor Injection
????????這個(gè)模式來(lái)源于 "Good Citizen."?模式(沒(méi)有聽(tīng)過(guò),不過(guò)猜想是可以保證城市里面配套設(shè)施齊全,呵呵....)
????????真正的意思是保證對(duì)象在創(chuàng)建的時(shí)候就是完整有效的,可以杜絕Setter Injection帶來(lái)的暴露屬性問(wèn)題
????????不過(guò)這個(gè)模式也有一個(gè)問(wèn)題就是類(lèi)的繼承,會(huì)導(dǎo)致一些復(fù)雜的設(shè)計(jì)
????????而且一般來(lái)說(shuō)一個(gè)類(lèi)的構(gòu)造方法可能不僅僅是初始化對(duì)象,還包含其它的目的,所以還是有選擇性的使用比較好?
????順便說(shuō)一下DAO模式
???????? Sun's Pattern Catalog?以后可以看看,現(xiàn)在還沒(méi)有時(shí)間看

???????像普通的Bean一樣定義訪問(wèn)數(shù)據(jù)的方法,不過(guò)訪問(wèn)是通過(guò)一個(gè)抽象的數(shù)據(jù)訪問(wèn)對(duì)象實(shí)現(xiàn)的(abstract Data Access Object)
Spring 和 PicoContainer的區(qū)別
????先說(shuō)一下pico的意思 :兆分之一 意思是這個(gè)容器特別特別小,意思它是最小的,呵呵 ,這樣才符合lightWeight容器的概念
????有點(diǎn)變態(tài)......
????言歸正傳
????Spring可以使用xml配置綁定也可以直接通過(guò)java訪問(wèn)
????picoContainer則只可以通過(guò)java綁定( PicoExtras 項(xiàng)目提供了pico綁定xml的支持)
????不過(guò)現(xiàn)在N多框架和開(kāi)源項(xiàng)目都使用Xml作配置,維護(hù)起來(lái)也很頭疼,雖然叫做good taste ,但也好不到哪去
????pico相對(duì)sring更為lightweight,但對(duì)其他項(xiàng)目的支持比較弱,比如hibernate
????而且spring不僅僅提供了IoC,更提供了Aop的支持
????不過(guò)有關(guān)Aop的支持,可以考慮使用 AspectWerkz or AspectJ.?
????這兩個(gè)都支持Constructor Injection,但只有Spring支持Setter Injection,所以選擇后者只有Spring這個(gè)唯一的選擇(翻譯的比較拗口)