Spring IOC DI 核心流程小結

2021-10-20 12:57:13 字數 1244 閱讀 2111

下面進入正文…

首先,來看這行**做了什麼:

new();

2)refresh() 建立並初始 ioc 容器大致邏輯如下:

載入:根據配置資訊,將掃瞄到的所有類載入成 beandefinition(ps:關鍵資訊 beanname、beanclass、islazyinit、issingon)

註冊:將list根據註冊到 beandefinitionmap,key 是 beanname(注:為了 getbean(class) 這裡本來還應該再按 beanclass 註冊一次)

3)在 refresh() 的最後會呼叫 finishbeanfactoryinitialization() 去建立 bean 例項和依賴注入(實際是先呼叫了 getbean() 方法中)

注:只有非懶載入的 bean 才會在 ioc 容器初始化時進行 bean 建立和依賴注入(單例bean預設非懶載入)

建立 bean 例項 createbeaninstance()

根據 beanname 獲取 beandefinition,如果沒有 beandefinition,則代表該 bean 不是 ioc 容器管理的

根據 beandefinition 儲存的 beanclass 反射建立例項物件

如果該 bean 是單例模式,則將該 bean 註冊到 singletonobjects,key 是 beanname

注:下次 getbean 時,如果 singletonobjects 存在該 bean,那麼直接返回就好了

執行依賴注入 populatebean()

獲取當前 bean 的所有成員變數,並判斷哪些字段標識了 @autowired 註解

對標有 @autowired 的註解的字段,再次呼叫 getbean() 獲取例項物件(遞迴),然後通過反射進行注入(@autowired 是按照型別獲取要注入的 bean 例項)

注:這裡其實就會牽扯到迴圈依賴的問題,spring 是通過**快取來解決的。

對 bean 進行初始化 initializebean()

然後,再看這行**又幹了什麼:

object bean = context.

getbean

("myaction"

);

對於這裡的 getbean()

spring ioc di 介紹及使用

1.spring介紹 spring負責管理專案中的所有物件,看作是專案中物件的管家.spring一站式框架 2.spring導包 3.spring概念 ioc inverse or control 控制反轉 di dependency injection 依賴注入 實現ioc思想需要di做支援 注入...

linux 核心 核心啟動流程

cs是 段暫存器,ip是指令指標暫存器 相當於偏移位址 儲存的是 指令的位址。cs ip共同作用生成了 位址,具體演算法是cs左移4位 ip即是 位址。例如cs 0xf000,ip 0xfff0,則 位址為0xffff0.global globl 命令 global symbol global 使得...

談談對Spring IoC DI的理解

多讀多寫多記錄,多學多練多思考。banana.banuit gang 香柚幫 下面我來說一下個人對spring的控制反轉和依賴注入的理解,如有不足或者不正確的地方,希望大家及時幫我指出來,謝謝。我們都知道spring的兩大核心就是ioc di和aop,ioc的好處是進行物件之間的解耦,aop的好處是...