沒想到,他面試竟然掛在了Spring的這個(gè)點(diǎn)上...
掃描二維碼
隨時(shí)隨地手機(jī)看文章
最近很多水友在后臺留言問:
Spring的循環(huán)依賴問題,這也是最近兩年新出的面試頻度較高的面試題!
下面我們就通過這篇文章讓大家了解循環(huán)依賴的問題
什么是循環(huán)依賴?
循環(huán)依賴其實(shí)是指兩個(gè)及以上bean相互持有對方,最終形成閉環(huán)的過程(一般聊循環(huán)依賴都是默認(rèn)的單例bean),簡單說就是A依賴B,B依賴C,C又依賴A。
其實(shí)在Spring中,有兩種循環(huán)依賴的場景...
第一種:構(gòu)造器的循環(huán)依賴
第二種:setter的依賴注入
第一種是沒有辦法解決的,而第二種可以使用提前暴露對象的方式進(jìn)行解決
那么肯定有很多小伙伴會有疑問,為什么?
其實(shí)想搞明白這個(gè)問題,需要對Spring的Bean的生命周期有一個(gè)完整的了解,如下圖:
大家可能對這個(gè)圖不太熟悉,但是我要強(qiáng)調(diào)的是,圖中我已經(jīng)用三種顏色標(biāo)識了,除了使用這部分之外,可以分為實(shí)例化和初始化,這也是解決問題的核心。
同時(shí),Spring中還使用了三級緩存來解決問題:
上圖就是Spring中的三級緩存,那么問題來了
Spring是如何通過三級緩存來解決問題的?
一級緩存能不能解決?為什么?
二級緩存能不能解決?為什么?
為什么非要使用三級緩存?使用三級緩存是為了解決什么問題?
為了弄懂這個(gè)問題,我在微信上跟馬士兵老師聊了很久,恍然大悟!
這里面知識點(diǎn)很多,以后有機(jī)會要專門寫一篇,如果你等不及,可以先去參加一下馬老師的《大廠必備Spring》訓(xùn)練營
時(shí)間:7月16日-7月17日 兩天,晚20:00開始
我為大家申請到了公眾號專屬福利,這兩天的直播,大家可以免費(fèi)報(bào)名!誠意夠不夠?
如何參加?
本活動僅限199人
掃碼加小助手,獲取直播地址
報(bào)名即送架構(gòu)師成長路線圖
專屬福利,僅限今天?。?!
內(nèi)容大綱如何?
第一天:
如何利用反射實(shí)現(xiàn)Autowired注解
一招教你如何手撕SpringIOC源碼
Spring程序是如何啟動的?
Spring是如何加載配置文件到應(yīng)用程序的?
掌握核心接口BeanDefinitionReader
掌握核心接口BeanFactory
徹底搞懂Spring的refresh方法
BeanPostProcessor接口的作用及實(shí)現(xiàn)
BeanFactoryPostProcessor接口的作用及實(shí)現(xiàn)
第二天:
Spring Bean有沒有必要實(shí)現(xiàn)Aware接口
Spring Bean的實(shí)例化過程大揭密
Spring Bean的初始化到底干了什么
徹底理解FactoryBean接口
完美解析Spring Bean的生命周期
Spring的Environment接口有什么作用?
為什么產(chǎn)生循環(huán)依賴問題
循環(huán)依賴在Spring中是如何解決的
如何巧妙回答Spring IOC面試題
本活動僅限199人
掃碼加小助手,獲取直播地址
報(bào)名即送架構(gòu)師成長路線圖
專屬福利,僅限今天?。?!
連續(xù)兩天(7月16日-7月17日)每天2小時(shí)(20:00-22:00),免費(fèi)聽《大廠必備Spring》,干貨滿滿,只能幫到你這里了,快去一起學(xué)習(xí)吧...
另外準(zhǔn)備一份干貨滿滿的學(xué)習(xí)資料,送給大家,抓緊領(lǐng)取...
本活動僅限199人
掃碼加小助手,獲取直播地址
報(bào)名即送架構(gòu)師成長路線圖
專屬福利,僅限今天?。?!
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!