一步一步探究Spring源碼之IOC(一)

1、概述

????IOC--Inversion Of Control,即控制反轉(zhuǎn),是一種設(shè)計思想。該思想主要包含兩個方面,由頂層控制類統(tǒng)一管理對象的生命周期和對象與對象之間的依賴,降低了耦合度,并讓用戶無需花費(fèi)精力去管理對象??刂疲嚎刂茖ο蟮漠a(chǎn)生及依賴的入口,反轉(zhuǎn):對象的產(chǎn)生由開發(fā)者產(chǎn)生變?yōu)轫攲赢a(chǎn)生,由主動變?yōu)榱吮粍印OC引申出兩個概念:容器、依賴注入。

????容器:存放東西的器皿,把東西全部放到這個器皿里面,當(dāng)需要使用的時候就去器皿里面拿出來,用完之后再還回到器皿里。像大家比較熟悉的數(shù)據(jù)庫的連接池也可以看作是一個容器,所有數(shù)據(jù)庫連接都會放到一個池子里面,當(dāng)需要用到連接時就去池子里面拿一個,不用了再還回去,使用者不需要關(guān)注連接的管理,只需要拿和還兩個動作。而在IOC容器也可類比連接池,容器負(fù)責(zé)對象的實(shí)例化、初始化等,它管理整個對象的生命周期,所有對象都存放在容器當(dāng)中,如果需要使用對象則從容器中拿,使用者無需關(guān)注對象生命周期的管理。

????DI:Dependency Injection 依賴注入,對象之間的依賴關(guān)系由容器運(yùn)行時決定,應(yīng)用程序的運(yùn)行依賴于IOC容器,其運(yùn)行時依賴的對象也是通過IOC容器動態(tài)的注入。比如對象A需要操作數(shù)據(jù)庫,傳統(tǒng)方式需要在A中自己編寫代碼來獲得一個Connection對象,有了IOC容器之后,只需要告訴IOC容器A中需要一個Connection,至于這個Connection怎么構(gòu)造,何時構(gòu)造,A不需要知道。在系統(tǒng)運(yùn)行時,IOC容器會在適當(dāng)?shù)臅r候制造一個Connection,然后像打針一樣,注射到A當(dāng)中,這樣就完成了對各個對象之間關(guān)系的控制。A需要依賴 Connection才能正常運(yùn)行,而這個Connection是由IOC容器注入到A中的。

在研究IOC源碼之前需要去了解java的反射機(jī)制,IOC底層是通過反射實(shí)現(xiàn)的

2、架構(gòu)

2.1、核心內(nèi)作用說明

2.2、主要流程圖


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容