成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring:SpringIOC循環依賴問題

開發 前端
對于原型bean的初始化過程中不論是通過構造器參數循環依賴還是通過setXxx方法產生循環依賴,Spring都會直接報錯處理。

一、什么是循環依賴

循環依賴其實就是循環引用,也就是兩個或者兩個以上的 Bean 互相持有對方,最終形成閉環。比如A依賴于B,B依賴于C,C又依賴于A。

注意,這里不是函數的循環調用,是對象的相互依賴關系。循環調用其實就是一個死循環,除非有終結條件。

Spring中循環依賴場景有:

  • 構造器的循環依賴(構造器注入)
  • Field 屬性的循環依賴(set注入)

構造器的循環依賴問題無法解決,只能拋出BeanCurrentlyInCreationException 異常;在解決屬性循環依賴時,spring采用的是提前暴露對象的方法。

二、循環依賴處理機制

  • 單例 bean 構造器參數循環依賴(無法解決)
  • prototype 原型 bean循環依賴(無法解決)

對于原型bean的初始化過程中不論是通過構造器參數循環依賴還是通過setXxx方法產生循環依賴,Spring都會直接報錯處理。

AbstractBeanFactory.doGetBean()方法:

在獲取bean之前如果這個原型bean正在被創建則直接拋出異常。原型bean在創建之前會進行標記這個beanName正在被創建,等創建結束之后會刪除標記。

總結:Spring 不支持原型 bean 的循環依賴。

單例bean通過setXxx或者@Autowired進行循環依賴

Spring 的循環依賴的理論依據基于 Java 的引用傳遞,當獲得對象的引用時,對象的屬性是可以延后設置的,但是構造器必須是在獲取引用之前。

Spring通過setXxx或者@Autowired方法解決循環依賴其實是通過提前暴露一個ObjectFactory對象來完成的,簡單來說ClassA在調用構造器完成對象初始化之后,在調用ClassA的setClassB方法之前就把ClassA實例化的對象通過ObjectFactory提前暴露到Spring容器中。

  • Spring容器初始化ClassA通過構造器初始化對象后提前暴露到Spring容器。
  • ClassA調用setClassB方法,Spring首先嘗試從容器中獲取ClassB,此時ClassB不存在Spring容器中。
  • Spring容器初始化ClassB,同時也會將ClassB提前暴露到Spring容器中。
  • classB調用setClassA方法,Spring從容器中獲取ClassA ,因為第一步中已經提前暴露了ClassA,因此可以獲取到ClassA實例。
  • ClassA通過spring容器獲取到ClassB,完成了對象初始化操作。
  • 這樣ClassA和ClassB都完成了對象初始化操作,解決了循環依賴問題。
責任編輯:武曉燕 來源: 今日頭條
相關推薦

2019-11-26 14:30:20

Spring循環依賴Java

2025-03-17 00:21:00

2023-11-28 08:00:00

SpringJava

2021-05-06 07:58:57

Spring BeanIOCAOP

2021-09-01 11:45:10

Spring循環依賴面試

2024-06-05 11:43:10

2020-07-29 10:40:21

Spring循環依賴Java

2021-06-25 09:47:59

Spring循環依賴Java

2020-05-07 10:05:58

Spring循環依賴Java

2020-02-10 15:50:18

Spring循環依賴Java

2023-10-07 08:40:57

緩存屬性Spring

2019-09-09 06:30:06

Springboot程序員開發

2021-10-21 08:31:31

Spring循環依賴面試

2024-08-27 11:00:56

單例池緩存bean

2020-09-03 11:04:20

Spring 循環依賴

2024-03-04 08:47:17

Spring框架AOP

2023-05-03 23:48:24

Spring容器初始化

2024-03-18 00:00:00

SpringBean設計

2020-12-29 08:34:08

spring循環依賴開發

2022-08-17 07:52:31

Spring循環依賴單例池
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产视频一区 | 国产第一页在线播放 | 91九色视频在线 | 九九av| 成人精品一区二区三区中文字幕 | 一区二区三区国产好 | 精品成人免费一区二区在线播放 | 成人在线黄色 | 久久久久国 | 久久精品国产一区 | 巨大荫蒂视频欧美另类大 | 国产精品福利在线 | 在线免费观看成人 | 日本aa毛片a级毛片免费观看 | 欧美激情视频一区二区三区在线播放 | 伊人色综合久久久天天蜜桃 | 欧美另类视频 | 欧美性网 | 亚州精品成人 | 一级免费a| 亚洲免费大片 | 欧美精品久久久久久久久久 | av在线电影网站 | 欧美狠狠操 | 亚洲 欧美 另类 综合 偷拍 | 在线精品一区二区三区 | 国产精品99久久久精品免费观看 | 亚洲视频区 | 日韩成人免费视频 | 91久久久久久久久 | 精品视频在线免费观看 | 亚洲精品v | 久久久999精品 | 91在线免费视频 | 亚洲一区视频在线 | 国产欧美日韩综合精品一区二区 | 精品日韩| 久色网| 亚洲精品在线视频 | 国产日产精品一区二区三区四区 | 亚洲精品一区二区三区在线 |