spring學習 IOC 一 入門

2021-10-06 20:18:30 字數 2116 閱讀 9335

在講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,所有的功能擴充套件和對其他開源框架的支援都是基 於這兩點來做的,因...