最近很多水友在后臺留言問關(guān)于Spring的循環(huán)依賴問題,這也是最近兩年新出的面試頻度較高的面試題!
下面我們就通過這篇文章讓大家了解循環(huán)依賴的問題
什么是循環(huán)依賴?
循環(huán)依賴其實是指兩個及以上bean相互持有對方,最終形成閉環(huán)的過程(一般聊循環(huán)依賴都是默認的單例bean),簡單說就是A依賴B,B依賴C,C又依賴A。
其實在Spring中,有兩種循環(huán)依賴的場景...
第一種:構(gòu)造器的循環(huán)依賴
第二種:setter的依賴注入
第一種是沒有辦法解決的,而第二種可以使用提前暴露對象的方式進行解決
那么肯定有很多小伙伴會有疑問,為什么?
其實想搞明白這個問題,需要對Spring的Bean的生命周期有一個完整的了解,如下圖:
大家可能對這個圖不太熟悉,但是我要強調(diào)的是,圖中我已經(jīng)用三種顏色標識了,除了使用這部分之外,可以分為實例化和初始化,這也是解決問題的核心。
同時,Spring中還使用了三級緩存來解決問題:
上圖就是Spring中的三級緩存,那么問題來了
Spring是如何通過三級緩存來解決問題的?
一級緩存能不能解決?為什么?
二級緩存能不能解決?為什么?
為什么非要使用三級緩存?使用三級緩存是為了解決什么問題?