Spring IOC 容器的理解

從字面來理解是兩個(gè)概念,IOC 和容器。

容器:

IOC容器屬于 Spring core 模塊,是用來創(chuàng)建和管理 Bean 的地方,以單例的方式存儲(chǔ) Bean,具體存儲(chǔ)的地方:

DefaultListableBeanFactory 的 beanDefinitionMap

以ConcurentHashMap 的形式存儲(chǔ)了 BeanDefinition 對(duì)象,該對(duì)象封裝了 Spring 對(duì) 一個(gè)Bean 所有信息的定義,包括 類名,屬性,構(gòu)造方法參數(shù),依賴,是否延遲加載,是否單例等,之后對(duì) Bean 的操作都是直接對(duì)它進(jìn)行的。
IOC容器的初始化分三個(gè)步驟:

  • BeanDefinition 的資源定位
  • BeanDefinition 的資源的載入和解析
  • BeanDefinition 的注冊(cè)

我們經(jīng)常從 BeanFactory 實(shí)例化 Bean 開始說 Bean的生命周期,而 BeanFactory 就是在第二個(gè)步驟被構(gòu)造出來的。

IOC:

Inversion of Control,控制反轉(zhuǎn)。
我們依舊從字面來理解,控制和反轉(zhuǎn)。
一般我們需要一個(gè)對(duì)象的時(shí)候,都是直接通過 new 的方式創(chuàng)建,這個(gè)時(shí)機(jī)是由我們把握的。也就是說我們什么時(shí)候想要這個(gè)資源,我們就主動(dòng)拿,這個(gè)控制權(quán)在我們手上?,F(xiàn)在這個(gè)控制權(quán)交給 IOC容器了,我們通過聲明的方式表達(dá)我們想要的想法,但這個(gè)資源的創(chuàng)建和發(fā)放,都是 IOC容器控制的。
反轉(zhuǎn)的概念在哪呢,Spring 框架,說到底也只不過是個(gè)工具,編譯后也是以第三方包的形式存在代碼中,以前都是我們使用工具包直接獲取資源,現(xiàn)在反轉(zhuǎn)了,我們能不能獲取這個(gè)資源工具包說了算。

DI:

Dependency Injection,依賴注入,我們依賴 IOC容器注入資源(對(duì)象)。
DI 是 IOC容器實(shí)現(xiàn)控制反轉(zhuǎn)的方式,有三種,這里就不詳述了。
DI 是如何實(shí)現(xiàn)解耦的?
開發(fā)中,我們經(jīng)常在 控制層 調(diào)用 業(yè)務(wù)層 接口,沒有實(shí)現(xiàn)具體類,通過接口對(duì)象直接調(diào)業(yè)務(wù)方法。但是運(yùn)行時(shí)的時(shí)候,IOC容器就動(dòng)態(tài)調(diào)用了對(duì)應(yīng)實(shí)現(xiàn)類的方法。我們只需要通過 @Autowired 注入業(yè)務(wù)的最上層接口,只關(guān)心使用,不用關(guān)心具體的業(yè)務(wù)實(shí)現(xiàn)。達(dá)到了解耦的效果。

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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