首先我們要清楚什麽是循環依賴
意思就是多個bean相互持有對方,比如我們有兩個bean,第壹個bean依賴第二個bean,第二個bean也依賴第壹個bean。然後壹個程序去調用第壹個bean的時候,因為第壹個bean含有第二個bean的依賴,然後就會去調用第二個bean;再然後第二個bean也有第壹個bean的依賴,然後又去調用第壹個bean,就這樣壹直循環調用
最後spring又是怎麽去解決這樣壹個問題的呢?
先是實例化對象,然後賦值,初始化..........正是因為這樣壹個生命周期,造成了spring的循環依賴,最後就是spring采用三級緩存來解決他的循環依賴的問題
spring的三級緩存就是三個Map
壹級緩存:
他就是sqlsession級的緩存
二級緩存:
它是默認關閉的,是mapper級的緩存
三級緩存:存放實例化好的bean
整個的解決循環依賴的流程:
首先到壹級緩存的單列中去獲取,如果有就直接返回
如果沒有或者這時候正處於創建過程中,就到二級緩存中去獲取,如果拿到就直接返回
如果沒有拿到,那現在就到了三級緩存了,就是用getObject()從三級緩存中獲取,如果獲取到就把這個移除掉,放到二級緩存中去