在講spring的ioc之前,我們先看乙個示例
package bean1;
// service層
public
class
callservice
}// dao層
class
calldao
}// vo層
class
callvo
}// 測試類
class
testcall
}
從示例中,我們看到,每當需要呼叫某個類的時候,總是需要先new乙個物件出來。
試想一下,如果我們有很多的類,那麼我們需要反覆不斷的宣告。
並且,過多的物件,也會造成系統效能的下降。
那麼,是否可將這些new的操作,交給乙個工廠來操作呢?
# bean1.properties檔案
callservice=bean1.callservice
calldao=bean1.calldao
class
beanfactory
catch
(ioexception e)
}public
static object getbean
(string name)
catch
(instantiationexception e)
catch
(illegalacces***ception e)
catch
(classnotfoundexception e)
return null;
}}
class
testcall
}}
bean1.callservice@4b1210ee
bean1.callservice@4d7e1886
bean1.callservice@3cd1a2f1
bean1.callservice@2f0e140b
bean1.callservice@7440e464
可以看到,可以正常的獲取到類物件
但同時,我們發現,每次getbean的時候,都會生成新的物件,這個並不是我們想要的,因為,頻繁的建立物件會造成效能損失、記憶體消耗。
這種場景下,單例模式的可能會更適合我們
因此,我們需要有乙個「容器」來儲存例項化的物件,從而引出了容器的概念
class
beanfactory
}catch
(ioexception
| classnotfoundexception e)
catch
(illegalacces***ception e)
catch
(instantiationexception e)
}public
static object getbean
(string name)
}
bean1.callservice@75828a0f
bean1.callservice@75828a0f
bean1.callservice@75828a0f
bean1.callservice@75828a0f
bean1.callservice@75828a0f
從上面的示例,我們引出了工廠模式+「容器」,實現單例物件的建立。
從而我們引出了ioc的概念:inversion of controller,控制反轉。
我們可以這麼理解:當我們想要乙個類的時候,可以new物件,也可以從乙個beanfactory中獲取乙個。而ioc呢,是將我們new的操作,交給了spring容器統一管理,也就是將控制權交給spring統一處理
意義:ioc容器的引入,一定程度上簡化了我們對物件的操作,降低了耦合性
ioc包括:di(依賴注入dependency injection) 和依賴查詢dependency lookup,後續我們逐步分解
參考:
spring入門之IOC容器
ioc 其思想是反轉資源獲取的方向,傳統的資源查詢方式要求元件向容器發起請求查詢資源,作為回應,容器適時的返回資源 應用ioc後,容器主動地將資源推送給它所管理的元件,元件選擇一種合適的方式來接受資源 di 是ioc的另一種表達方式 即元件以一些預先定義好的方式 例如setter方法 接受來自容器的...
Spring入門(三)之IoC
一 ioc定義 ioc,即控制反轉。開發者在使用類的例項之前,需要先建立物件的例項。但是ioc將建立例項的任務交給ioc容器,這樣開發應用 時只需要直接使用類的例項,這就是ioc。在討論控制反轉這個概念的過程中,martin fowler提出了乙個更為準確的概念,叫做依賴注入 dependency ...
Spring原始碼學習(一) IoC
一直想抽空把spring原始碼拿來讀讀,但真正去做這件事的時候發現不簡單,spring發展這麼多年,它的規模已不是乙個一般的開源框 架所能比的,它的主要架構和流程不是非常清晰,很難抓到要害,但有一點可以肯定,它的根基是ioc和aop,所有的功能擴充套件和對其他開源框架的支援都是基 於這兩點來做的,因...