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