91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spring要怎么解決循環依賴

發布時間:2021-07-24 11:05:06 來源:億速云 閱讀:189 作者:chen 欄目:大數據

這篇文章主要講解了“spring要怎么解決循環依賴”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“spring要怎么解決循環依賴”吧!

先說結論,spring通過三級緩存機制來解決循環依賴問題,構造器依賴除外,即構造器注入可能會報錯。

循環依賴的情況如下:

spring要怎么解決循環依賴

spring要怎么解決循環依賴

首先spring初始化bean的步驟如下:

spring要怎么解決循環依賴

這里只需要簡單的理解為只需要三步:

  1. 實例化

  2. 填充屬性(注入依賴)

  3. 初始化完成

spring在創建Bean A的時候會先去一級緩存(singletonObjects),如果一級緩存沒有則再從二級緩存(earlySingletonObjects)中獲取,如果二級緩存也沒有,則再從三級緩存(singletonFactories)中獲取,如果還獲取不到,則實例化一個A,然后放入三級緩存,然后填充屬性,此刻發現依賴B,于是創建B,同樣的經過上述步驟,由于每級緩存都獲取不到,于是實例化B,然后填充屬性,發現依賴A,然后依次去每級緩存中獲取,由于三級緩存中已經有一個A,于是B可以順利注入依賴,并被正確的初始化,然后遞歸返回,于是A也可以被正確的初始化了。

通過上述說明,可以看出bean都是需要可以先被實例化才可以的,所以這也就是為什么構造器依賴可能會失敗的原因。假如A構造器依賴B,因為實例化A需要先調用A的構造函數,發現依賴B,那么需要去初始化B,但是B也依賴A,不管B是通過構造器注入還是setter注入,此時由于A沒有被實例化,沒有放入三級緩存,所以B無法被初始化,所以spring會直接報錯。反之,如果A通過setter注入的話,那么則可以通過構造函數先實例化,放入緩存,然后再填充屬性,這樣的話不管B是通過setter還是構造器注入A,都能在緩存中獲取到,于是可以初始化。

由此可見,循環依賴中,如果spring先去創建的bean通過構造器注入另一個bean則會失敗,反之則可以成功。所以這也是為什么一定不好通過構造器注入的原因。

感謝各位的閱讀,以上就是“spring要怎么解決循環依賴”的內容了,經過本文的學習后,相信大家對spring要怎么解決循環依賴這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

十堰市| 明水县| 百色市| 栾川县| 合阳县| 灵山县| 佛冈县| 银川市| 九龙坡区| 信阳市| 晴隆县| 侯马市| 芜湖县| 上栗县| 江永县| 安溪县| 平阳县| 平乡县| 错那县| 怀宁县| 霍城县| 通辽市| 沽源县| 丰台区| 化德县| 裕民县| 股票| 区。| 锦屏县| 焦作市| 嫩江县| 古田县| 交城县| 易门县| 穆棱市| 江华| 凤山县| 泗阳县| 霍州市| 茶陵县| 砀山县|