面試的時候,偶爾會遇到讓談談ioc容器的問題,在這裡做乙個簡要的整理。這個問題從畢業到現在時不時的出現,答案也一次一次的被重新整理。因為個人理解有限,僅從三個階段去闡述,同時歡迎各位拍磚。
[size=medium] [b] 階段一:概念的闡述[/b]
[b] 階段二:從實現的角度去闡述[/b]
[b] 階段三:舉一反三的使用場景[/b][/size]
[b] 階段一:概念的闡述[/b]
ioc、di是什麼?ioc即控制反轉,di即依賴注入,表面上兩個是不沾邊的概念,其實是解決「物件與物件之間強耦合問題」的方式和方法。那麼先來說一下到底ioc是一種什麼樣的方式,舉個不恰當的栗子,a想去買一套二手房,b剛好手裡有一套二手房,但是a想知道b有二手房,必須看小廣告,然後打**問(查詢物件),一開始可能先給c打,可是c只想把他的二手房租出去,並不想賣,終於有一天找到了b,然後a說先把b這套房訂下來(強依賴),本來以為皆大歡喜了。可是準備簽合同的時候b又找到另外乙個出**的人,b告訴a說對不起不賣了,a只能哭了。這個時候扮演ioc的角色出現了,那就是房產中介d,當a想買房的時候,告訴d我要買個幾室幾廳的二手房;b想賣房,然後也找d登記了。d手裡有很多**和客源(ioc 容器)直接告訴a、b成交,這問題就解決了。我們回顧一下這種方式,就會發現本來由a正向控制b,這樣b稍微一變就杯具了 :x ,當d出現後,由d來反向控制a,而 d來拿到b給a的過程就是di。理解了這一點,我們換成官方的話就是:「依賴注入」明確描述了「被注入物件依賴ioc容器配置依賴物件」,」控制反轉「把建立和查詢依賴物件的控制權交給了容器,由容器進行注入組合物件的思想,解決了物件與物件之間強耦合的問題
[b] 階段二:從實現的角度去闡述[/b]
首先,在沒有ioc的情況下,我們是這樣強依賴的
[url=解決容器對元件的「侵入式」管理的兩種方案--主動查詢和控制反轉 [/url]
接著,簡單通過反射加配置的方式
[url=初步實現[/url]
最後,我們使用跟spring相似的實現方式(只實現了spring三種注入方式中的set注入)
[url=最終版[/url]
[b] 階段三:舉一反三的使用場景[/b]
除了spring 容器對bean的管理之外,我能想到的ioc場景
1.對訊息的處理封裝成訊息中心,訊息的註冊和消費都在這個消費中心去做,由訊息中心通過介面呼叫方式,注入到消費方,這樣可以達到可靠的訊息處理,包括失敗重試
2.分布式rpc服務的註冊中心
[quote]
Spring之IOC容器的實現
控制反 依賴物件的獲得被反轉了,即依賴注入。beandefinition用來管理基於spring的應用中的各種物件以及它們之間的相互依賴關係。抽象了我們對bean的定義,是讓容器起作用的主要資料模型。依賴反轉功能都是圍繞對beandefinition的處理來完成的。程式設計式使用ioc容器的過程 c...
IOC容器原理與實現
spring ioc主要分為兩個過程 ioc容器初始化 依賴注入 ioc容器初始化主要分為三個過程 第乙個過程,resource定位過程,這個過程如能主要是beandefintion的資源定位,主要就是找到定義bean的檔案。第二個過程,beandefinition的載入過程,這個載入過程就是把使用...
利用反射實現Spring的IOC容器
概念步驟 spring的核心模組就是ioc機制,ioc是inversion of control簡稱。inversion 反轉 物件的獲得,原來由程式開發人員自己構造,變成了由spring指定,由主動獲取變成了被動的接收。control 控制 控制的是物件的建立,原來由程式開發人員來建立乙個物件,現...