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

1、概述

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

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

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

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

2、架構(gòu)

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

2.2、主要流程圖


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

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

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