spring 三级缓存_通过画图+视频把循环依赖、监听器等等spring源码讲明白了
大家在閱讀源碼的時(shí)候有沒(méi)有這種感覺(jué):每次要看源碼的時(shí)候十分信誓旦旦逼迫自己努力看著源碼,但是還沒(méi)看多長(zhǎng)時(shí)間就會(huì)感覺(jué)枯燥,無(wú)味沒(méi)意思,所以我是十分不愿意去看源碼,但是今天福利來(lái)了,有位大神通過(guò)畫圖+視頻的方式把spring源碼、三級(jí)緩存、循環(huán)依賴等等問(wèn)題徹底講明白了,下面就和大家一起學(xué)習(xí)!
以下展示的圖、視頻以及源碼手冊(cè)都可以免費(fèi)獲取,免費(fèi)獲取方式在文末!
Spring架構(gòu)設(shè)計(jì):對(duì)象到底怎么創(chuàng)建
視頻
Spring執(zhí)行流程:
黃色區(qū)域:實(shí)例化加載區(qū)域
紅色區(qū)域:為run方法執(zhí)行區(qū)域
視頻
循環(huán)依賴
視頻
通過(guò)三級(jí)緩存來(lái)解決循環(huán)依賴的問(wèn)題
視頻
三級(jí)緩存讀取的順序是什么順序?
先從一級(jí)緩存獲取,取不到從二級(jí)緩存獲取,取不到從E級(jí)緩存獲取
正常情況下,我們應(yīng)該在for循環(huán)中創(chuàng)建所有xml文件中定義的bean對(duì)象,但是當(dāng)存在循環(huán)引用的時(shí)候,創(chuàng)建A對(duì)象的時(shí)候順帶手的把B對(duì)象創(chuàng)建,因此在創(chuàng)建B的時(shí)候直接從一級(jí)緩存中獲取即可,不需要重復(fù)創(chuàng)建B對(duì)象
通過(guò)源碼的debug,已經(jīng)了解了完整的流程:
1、一級(jí),二級(jí),三級(jí)緩存中分別存放什么狀態(tài)的對(duì)象?
一級(jí)緩存放完整對(duì)象,二級(jí)緩存放完成實(shí)例化但未初始化的對(duì)象,3級(jí)緩存放lambda表達(dá)式
2、為什么非要使用三級(jí)緩存,二級(jí)行不行,一級(jí)行不行?
一級(jí)緩存:
一級(jí)緩存中會(huì)放置完整對(duì)象或者非完整對(duì)象,如果在操作的時(shí)候恰巧獲取到非完整對(duì)象怎么辦?
二級(jí)緩存:
一級(jí)緩存放完整對(duì)象, 級(jí)緩存放非完整對(duì)象,在創(chuàng)建代理對(duì)象的時(shí)候,需不需要提前創(chuàng)建出屬性是默認(rèn)值的普通對(duì)象?
一定會(huì)創(chuàng)建出普通對(duì)象
當(dāng)需要?jiǎng)?chuàng)建代理對(duì)象的時(shí)候,需要執(zhí)行一個(gè)lambda表達(dá)式來(lái)創(chuàng)建代理類, 如果沒(méi)有三級(jí)緩存的話,就有可能有一種情況, 剛開(kāi)始先創(chuàng)建出普通對(duì)象,然后被調(diào)用了,后續(xù)又需要代理對(duì)象,此時(shí)生成了,那么最終使用的效果是有些使用普通對(duì)象有些使用代理對(duì)象
如果程序中不存在AOP的問(wèn)題,那么二級(jí)緩存足以解決循環(huán)依賴問(wèn)題
視頻
Spring監(jiān)聽(tīng)器十五步詳細(xì)執(zhí)行流程
視頻
熟練使用Spring
視頻
Bean的生命周期
視頻
springboot源碼閱讀
需要領(lǐng)取全部圖和視頻教程以及源碼手冊(cè)的朋友,麻煩幫忙點(diǎn)贊一下這篇文章+關(guān)注我,免費(fèi)在這篇文章最上邊的封面圖片中!
總結(jié)
以上是生活随笔為你收集整理的spring 三级缓存_通过画图+视频把循环依赖、监听器等等spring源码讲明白了的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python没有运行_Python没有执
- 下一篇: 剪切粘贴时总是上次的内容_自学PS:拷贝