Spring三級(jí)緩存機(jī)制

### 一蔫缸、一級(jí)緩存(singletonObjects)


1. **作用**:存儲(chǔ)已經(jīng)完全初始化的單例Bean對(duì)象统倒。

2. **數(shù)據(jù)結(jié)構(gòu)**:一個(gè)Map<String, Object>,鍵是bean的名稱两踏,值是bean實(shí)例计寇。

3. **說明**:當(dāng)bean完全創(chuàng)建并初始化完成后扩淀,它就會(huì)被放入一級(jí)緩存中吠撮,表示該bean可供整個(gè)應(yīng)用程序使用伊滋。


### 二洋幻、二級(jí)緩存(earlySingletonObjects)


1. **作用**:存儲(chǔ)提前暴露的單例Bean郁轻,即在bean實(shí)例化過程中部分初始化好的對(duì)象。

2. **數(shù)據(jù)結(jié)構(gòu)**:同樣是一個(gè)Map<String, Object>,鍵是bean的名稱好唯,值是部分初始化的bean對(duì)象竭沫。

3. **說明**:在bean的創(chuàng)建過程中,如果某些依賴已經(jīng)創(chuàng)建好并且可以提供給其他bean使用骑篙,這些尚未完全初始化的bean會(huì)被放入二級(jí)緩存中蜕提,以供后續(xù)使用。


### 三靶端、三級(jí)緩存(singletonFactories)


1. **作用**:存儲(chǔ)bean創(chuàng)建的工廠方法谎势,即正在創(chuàng)建中的bean的工廠對(duì)象。

2. **數(shù)據(jù)結(jié)構(gòu)**:一個(gè)Map<String, ObjectFactory<?>>杨名,鍵是bean的名稱它浅,值是一個(gè)ObjectFactory實(shí)例,用于獲取正在創(chuàng)建中的bean镣煮。

3. **說明**:當(dāng)Spring遇到循環(huán)依賴問題姐霍,且目標(biāo)bean尚未初始化時(shí),它會(huì)將一個(gè)工廠方法放入三級(jí)緩存中典唇。后續(xù)通過這個(gè)工廠方法來生成正在創(chuàng)建中的bean镊折。


### 四、三級(jí)緩存如何解決循環(huán)依賴


Spring解決循環(huán)依賴的關(guān)鍵在于提前暴露和工廠方法的使用介衔,具體流程如下:


1. **第一次實(shí)例化bean**:當(dāng)Spring需要實(shí)例化一個(gè)bean時(shí)恨胚,會(huì)先檢查該bean是否已經(jīng)在一級(jí)緩存中。如果存在炎咖,則直接返回赃泡。如果不存在,則會(huì)開始創(chuàng)建這個(gè)bean乘盼。

2. **提前暴露部分初始化的bean**:在創(chuàng)建過程中升熊,Spring會(huì)把已經(jīng)部分初始化(例如構(gòu)造函數(shù)已經(jīng)調(diào)用完)的bean放入二級(jí)緩存中。這樣绸栅,如果其他bean依賴于這個(gè)bean级野,能夠獲取到該bean的部分初始化實(shí)例(通常是一個(gè)代理對(duì)象)。

3. **循環(huán)依賴解決**:假設(shè)有bean A和bean B粹胯,A依賴B蓖柔,而B又依賴A。Spring會(huì)先實(shí)例化A风纠,并把A的工廠方法放入三級(jí)緩存中况鸣。此時(shí),A還沒有完全初始化竹观,但它已經(jīng)暴露出一個(gè)工廠方法镐捧,其他依賴它的bean(例如B)可以通過工廠方法獲取到A的實(shí)例。當(dāng)Spring需要初始化B時(shí),發(fā)現(xiàn)B依賴A愤估,而A尚未完全初始化帮辟。這時(shí),Spring會(huì)通過三級(jí)緩存中的工廠方法獲取到A的實(shí)例玩焰,由于A的工廠方法已經(jīng)暴露由驹,Spring能夠獲取到一個(gè)提前暴露的部分實(shí)例(此時(shí)A還未完全初始化,但足夠滿足B的依賴)昔园,然后繼續(xù)初始化B蔓榄。在B初始化完成后,Spring會(huì)繼續(xù)完成A的初始化默刚。

4. **最終完成初始化**:一旦A和B的循環(huán)依賴問題解決后甥郑,Spring會(huì)將它們完全初始化并放入一級(jí)緩存中。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荤西,一起剝皮案震驚了整個(gè)濱河市澜搅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌邪锌,老刑警劉巖勉躺,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異觅丰,居然都是意外死亡饵溅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門妇萄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜕企,“玉大人,你說我怎么就攤上這事冠句∏嵫冢” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵轩端,是天一觀的道長(zhǎng)放典。 經(jīng)常有香客問我,道長(zhǎng)基茵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任壳影,我火速辦了婚禮拱层,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宴咧。我一直安慰自己根灯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烙肺,像睡著了一般纳猪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桃笙,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天氏堤,我揣著相機(jī)與錄音,去河邊找鬼搏明。 笑死鼠锈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的星著。 我是一名探鬼主播购笆,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼虚循!你這毒婦竟也來了同欠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤横缔,失蹤者是張志新(化名)和其女友劉穎行您,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剪廉,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娃循,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斗蒋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捌斧。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖泉沾,靈堂內(nèi)的尸體忽然破棺而出捞蚂,到底是詐尸還是另有隱情,我是刑警寧澤跷究,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布姓迅,位于F島的核電站,受9級(jí)特大地震影響俊马,放射性物質(zhì)發(fā)生泄漏丁存。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一柴我、第九天 我趴在偏房一處隱蔽的房頂上張望解寝。 院中可真熱鬧,春花似錦艘儒、人聲如沸聋伦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)觉增。三九已至兵拢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逾礁,已是汗流浹背说铃。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敞斋,地道東北人截汪。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像植捎,于是被迫代替她去往敵國(guó)和親衙解。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容