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

Spring:SpringIOC循環(huán)依賴問題

開發(fā) 前端
對(duì)于原型bean的初始化過程中不論是通過構(gòu)造器參數(shù)循環(huán)依賴還是通過setXxx方法產(chǎn)生循環(huán)依賴,Spring都會(huì)直接報(bào)錯(cuò)處理。

一、什么是循環(huán)依賴

循環(huán)依賴其實(shí)就是循環(huán)引用,也就是兩個(gè)或者兩個(gè)以上的 Bean 互相持有對(duì)方,最終形成閉環(huán)。比如A依賴于B,B依賴于C,C又依賴于A。

注意,這里不是函數(shù)的循環(huán)調(diào)用,是對(duì)象的相互依賴關(guān)系。循環(huán)調(diào)用其實(shí)就是一個(gè)死循環(huán),除非有終結(jié)條件。

Spring中循環(huán)依賴場(chǎng)景有:

  • 構(gòu)造器的循環(huán)依賴(構(gòu)造器注入)
  • Field 屬性的循環(huán)依賴(set注入)

構(gòu)造器的循環(huán)依賴問題無法解決,只能拋出BeanCurrentlyInCreationException 異常;在解決屬性循環(huán)依賴時(shí),spring采用的是提前暴露對(duì)象的方法。

二、循環(huán)依賴處理機(jī)制

  • 單例 bean 構(gòu)造器參數(shù)循環(huán)依賴(無法解決)
  • prototype 原型 bean循環(huán)依賴(無法解決)

對(duì)于原型bean的初始化過程中不論是通過構(gòu)造器參數(shù)循環(huán)依賴還是通過setXxx方法產(chǎn)生循環(huán)依賴,Spring都會(huì)直接報(bào)錯(cuò)處理。

AbstractBeanFactory.doGetBean()方法:

在獲取bean之前如果這個(gè)原型bean正在被創(chuàng)建則直接拋出異常。原型bean在創(chuàng)建之前會(huì)進(jìn)行標(biāo)記這個(gè)beanName正在被創(chuàng)建,等創(chuàng)建結(jié)束之后會(huì)刪除標(biāo)記。

總結(jié):Spring 不支持原型 bean 的循環(huán)依賴。

單例bean通過setXxx或者@Autowired進(jìn)行循環(huán)依賴

Spring 的循環(huán)依賴的理論依據(jù)基于 Java 的引用傳遞,當(dāng)獲得對(duì)象的引用時(shí),對(duì)象的屬性是可以延后設(shè)置的,但是構(gòu)造器必須是在獲取引用之前。

Spring通過setXxx或者@Autowired方法解決循環(huán)依賴其實(shí)是通過提前暴露一個(gè)ObjectFactory對(duì)象來完成的,簡(jiǎn)單來說ClassA在調(diào)用構(gòu)造器完成對(duì)象初始化之后,在調(diào)用ClassA的setClassB方法之前就把ClassA實(shí)例化的對(duì)象通過ObjectFactory提前暴露到Spring容器中。

  • Spring容器初始化ClassA通過構(gòu)造器初始化對(duì)象后提前暴露到Spring容器。
  • ClassA調(diào)用setClassB方法,Spring首先嘗試從容器中獲取ClassB,此時(shí)ClassB不存在Spring容器中。
  • Spring容器初始化ClassB,同時(shí)也會(huì)將ClassB提前暴露到Spring容器中。
  • classB調(diào)用setClassA方法,Spring從容器中獲取ClassA ,因?yàn)榈谝徊街幸呀?jīng)提前暴露了ClassA,因此可以獲取到ClassA實(shí)例。
  • ClassA通過spring容器獲取到ClassB,完成了對(duì)象初始化操作。
  • 這樣ClassA和ClassB都完成了對(duì)象初始化操作,解決了循環(huán)依賴問題。
責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2019-11-26 14:30:20

Spring循環(huán)依賴Java

2025-03-17 00:21:00

2023-11-28 08:00:00

SpringJava

2021-09-01 11:45:10

Spring循環(huán)依賴面試

2024-06-05 11:43:10

2021-05-06 07:58:57

Spring BeanIOCAOP

2021-10-21 08:31:31

Spring循環(huán)依賴面試

2024-08-27 11:00:56

單例池緩存bean

2023-10-07 08:40:57

緩存屬性Spring

2020-07-29 10:40:21

Spring循環(huán)依賴Java

2020-05-07 10:05:58

Spring循環(huán)依賴Java

2019-09-09 06:30:06

Springboot程序員開發(fā)

2021-06-25 09:47:59

Spring循環(huán)依賴Java

2020-02-10 15:50:18

Spring循環(huán)依賴Java

2020-09-03 11:04:20

Spring 循環(huán)依賴

2024-03-04 08:47:17

Spring框架AOP

2023-05-03 23:48:24

Spring容器初始化

2024-03-18 00:00:00

SpringBean設(shè)計(jì)

2024-04-15 08:17:21

Spring依賴注入循環(huán)依賴

2020-12-29 08:34:08

spring循環(huán)依賴開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日本涩涩视频 | 亚洲精品自拍视频 | 久久黄色网 | 久久精品网 | 亚洲午夜久久久 | 欧美日韩一区二区三区四区 | 羞羞视频在线观看 | 国产91av视频 | 精品一区二区三区视频在线观看 | 日韩精品在线一区 | 国产美女精品视频 | 一区二区国产精品 | 天天操夜夜操 | 欧美日韩一区二区三区在线观看 | 欧美日韩精品中文字幕 | 亚洲午夜小视频 | 亚洲精品一区二区三区四区高清 | 亚洲成人播放器 | 中文字幕在线播放第一页 | 欧美国产视频 | 国产精品久久久久久久久动漫 | 黄色成人亚洲 | 罗宾被扒开腿做同人网站 | 国产区视频在线观看 | 国产区高清 | 精品国产成人 | 18性欧美| 盗摄精品av一区二区三区 | 真人女人一级毛片免费播放 | 久久久久无码国产精品一区 | 国产精品久久久爽爽爽麻豆色哟哟 | 久久夜夜 | 日本不卡一区二区三区在线观看 | 亚洲欧美激情视频 | 99热这里有精品 | 91精品久久久久久久99 | 日韩免费 | 色婷婷一区二区三区四区 | 久久成人久久 | 本道综合精品 | 狠狠入ady亚洲精品经典电影 |