本文參考 《死磕Spring系列》
Spring IOC 容器

image.png
Spring IOC 容器所起的作用如上圖所示,它會(huì)以某種方式加載 Configuration Metadata,將其解析注冊(cè)到容器內(nèi)部,然后回根據(jù)這些信息綁定整個(gè)系統(tǒng)的對(duì)象,最終組裝成一個(gè)可用的基于輕量級(jí)容器的應(yīng)用系統(tǒng)。
Spring 在實(shí)現(xiàn)上述功能中,將整個(gè)流程分為兩個(gè)階段:容器初始化階段和加載bean 階段。
- 容器初始化階段:首先通過某種方式加載 Configuration Metadata (主要是依據(jù) Resource、ResourceLoader 兩個(gè)體系),然后容器會(huì)對(duì)加載的 Configuration MetaData 進(jìn)行解析和分析,并將分析的信息組裝成 BeanDefinition,并將其保存注冊(cè)到相應(yīng)的 BeanDefinitionRegistry 中。至此,Spring IOC 的初始化工作完成。

Spring IOC容器初始化-loadBean 的全流程

bean 的轉(zhuǎn)換過程
-
**加載 bean **階段:經(jīng)過容器初始化階段后,應(yīng)用程序中定義的 bean 信息已經(jīng)全部加載到系統(tǒng)中了,當(dāng)我們顯示或者隱式地調(diào)用 getBean() 時(shí),則會(huì)觸發(fā)加載 bean 階段。在這階段,容器會(huì)首先檢查所請(qǐng)求的對(duì)象是否已經(jīng)初始化完成了,如果沒有,則會(huì)根據(jù)注冊(cè)的 bean 信息實(shí)例化請(qǐng)求的對(duì)象,并為其注冊(cè)依賴,然后將其返回給請(qǐng)求方。至此第二個(gè)階段也已經(jīng)完成。
getBean 的全流程

image.png
