亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

凤庆县| 乃东县| 澎湖县| 报价| 洮南市| 洛阳市| 清徐县| 芷江| 克山县| 玉林市| 尼勒克县| 营山县| 榆中县| 沙坪坝区| 密云县| 淮北市| 武隆县| 福泉市| 灵丘县| 天津市| 和田市| 涞水县| 鸡泽县| 泗阳县| 汾西县| 卓资县| 米脂县| 工布江达县| 独山县| 通州市| 治多县| 上犹县| 甘德县| 唐河县| 长宁区| 石棉县| 长治市| 泉州市| 大足县| 皮山县| 中阳县|