国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

意料之中、要求3-5年的Leader,最后選了應屆生

開發 前端
Spring無法解決構造函數導致的循環依賴,是因為在對象實例化的過程中,構造函數都是最早被調用的,那個時候對象還沒完成實例化,所以沒辦法注入一個尚未完成創建的對象。

閑談

大家好,我是了不起,前段時間,了不起在當面試官,挑了許多人給leader去面談,最后可能是因為把之前某個想走的同事留了下來了,所以對新人沒有太多的要求,所以選了應屆生。

感覺如果是這種情況,還是比較利好應屆生的,不然有些業務比較特殊的活,需要有能力接下上一任的工作,對面試的人要求會非常的高,人也不好找,最后頭疼的也是我。

不提也罷,回歸正題,分享一道最近常用來面試1-2年工作經驗的人的面試題吧。

什么是Spring的循環依賴問題

圖片圖片

在軟件開發的世界里,我們總是追求代碼的優雅與高效。目前Java主流的SpringBoot、SpringCloud框架無疑是我們最好的幫手。它不僅簡化了企業級應用的開發,還為我們提供了許多強大的功能。

比如依賴注入DI,但是,就像任何技術都有其雙刃劍的一面,依賴注入也不例外,Spring在進行依賴注入時最常見的一個問題——循環依賴。

舉例一個場景,我們有兩個Service類A和B,A類里有個a2方法需要調用了B類里的b1方法,B類里的b2方法需要用到A類里的a1方法。

圖片圖片

那么按照我們Java代碼的無腦編程,就會是下面的這個情況:

ServiceA的a2方法調用ServiceB里的b1方法。

@Service
public class ServiceA implements Service {

    @Autowired
    private ServiceB serviceB;
    
    @Override
    public void a1() {
        System.out.println("當前是ServiceA的a1方法"");
    }
                           
    @Override
    public void a2() {
        System.out.println("這里將調用ServiceB的b1方法");
        serviceB.b1();
    }
}

同樣ServiceB的b2方法就調用ServiceA里的a1方法。

@Service
public class ServiceB implements Service{

    @Autowired
    private ServiceA serviceA;

    @Override
    public void b1() {
        System.out.println("當前是ServiceB的b1方法");
    }

    @Override
    public void b2() {
        System.out.println("這里將調用ServiceA的a1方法");
        serviceA.a1();
    }
    
}

運行結果

當你運行這個SpringBoot應用的時候,會遇到一個錯誤,錯誤信息如下:

org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'serviceA': Requested bean is currently in creation: Is there an unresolvable circular reference?

拓展復習

還記得Bean的創建過程嗎?Spring 在啟動時會根據配置文件或注解來創建和初始化所有的bean。這個過程可以分為幾個階段:

  1. 實例化(Instantiation):Spring 容器創建一個bean的實例。
  2. 屬性填充(Population of Properties):Spring 容器設置bean的所有屬性,包括依賴注入。
  3. 初始化(Initialization):Spring 容器調用bean的初始化方法(如 @PostConstruct 注解的方法或 InitializingBean 接口的 afterPropertiesSet 方法)。

現在我們有兩個bean:ServiceA 和 ServiceB,它們相互依賴對方。具體來說:

  • ServiceA 依賴 ServiceB
  • ServiceB 依賴 ServiceA

當Spring嘗試創建 ServiceA 時,它會發現 ServiceA 需要 ServiceB。于是Spring開始創建 ServiceB。然而,在創建 ServiceB 的過程中,Spring 又發現 ServiceB 需要 ServiceA。這時,Spring 發現自己已經在一個創建 ServiceA 的過程中,從而導致了一個循環依賴。

圖片圖片

好比這張圖一樣,把箭頭的方向可以理解成前提條件,是不是就一目了然了。彼此成為對方的前提條件。就好比,不考慮進化論,究竟是先雞還是先蛋?

回歸正題

在開發中,一般遇到這個問題,通常會使用@Lazy來解決。

@Service
public class ServiceB implements Service{

    @Autowired
    @Lazy
    private ServiceA serviceA;

    @Override
    public void b1() {
        System.out.println("當前是ServiceB的b1方法");
    }

    @Override
    public void b2() {
        System.out.println("這里將調用ServiceA的a1方法");
        serviceA.a1();
    }
}

它一方面可以減少Spring的IOC容器在啟動時的加載時間,一方面也可以解決Bean的循環依賴問題。

但是這是在日常開發使用的時候的處理方法,面試的時候肯定不會就這么放過你。

所以我們在面試的時候遇到這個問題,通常還會再多回答兩個方式。

Spring解決循環依賴必須是單例的Bean

這是一種依賴Spring提前暴露對象的方式來實現的。這種也叫半成品對象,通過對上面的學習,我們知道了循環依賴的原因是因為在創建的時候需要引用到另一個正在創建的對象,通過暴露這種半成品對象,讓初始化的時候能夠解決循環依賴的問題。

但是這種方式不能使用在原型對象的創建和初始化!背過面試題的都知道:

  1. 單例對象的特點:

單例對象在整個容器生命周期內只會被創建一次。

這種特性使得單例對象的依賴關系在容器啟動時就已經確定下來,不會發生變化。

  1. 原型對象的特點:

原型對象在每次請求時都會創建新的實例。

對于原型對象而言,每次創建新實例時都可能涉及到不同的對象實例,因此不能像單例那樣緩存并復用半成品對象。

不支持構造函數注入

Spring無法解決構造函數導致的循環依賴,是因為在對象實例化的過程中,構造函數都是最早被調用的,那個時候對象還沒完成實例化,所以沒辦法注入一個尚未完成創建的對象。

因此,解決循環依賴的一種方式,就是避開構造函數注入。

結論

上面的知識只是給你科普用的,不是讓你用來回答的。如果你實在不理解,那就背下面的吧!

  1. 重新設計,徹底消除循環依賴(是一句廢話沒錯,但是面試得講一下)
  2. 改成非構造器注入的形式,比如setter注入或者字段注入
  3. 使用@Lazy解決
責任編輯:武曉燕 來源: Java面試教程
相關推薦

2010-11-04 10:14:13

職場

2013-01-09 08:59:13

20122013iOS

2020-12-13 17:47:44

物聯網安全連接性IOT

2018-07-30 16:32:25

應屆生認知誤區

2010-10-28 11:15:13

求職

2021-05-12 13:56:05

手機華為蘋果

2025-07-18 09:50:26

2010-11-16 10:14:22

2009-04-01 08:31:47

索尼錄用應屆大學生

2012-10-30 15:50:02

應屆生團隊就業

2009-11-24 10:45:01

2012-06-04 09:20:19

程序員

2009-03-25 09:15:33

面試騰訊趨勢

2015-10-26 14:29:54

服務器開發應屆生

2009-02-01 15:40:07

2015-10-15 10:49:09

服務器開發虛擬化應屆生

2013-07-01 12:19:00

大學生IT博客大賽IT博客大賽博客大賽

2010-12-15 15:28:40

職場

2018-03-08 14:39:40

華為速度業務

2025-11-12 17:10:51

AI數據人工智能
點贊
收藏

51CTO技術棧公眾號

中文字幕视频在线免费| 欧美国产一二三区| 漂亮人妻被中出中文字幕| 欧美色爱综合| 亚洲白拍色综合图区| 飘雪影视在线观看免费观看| 99久久99久久久精品齐齐| 国产成人精品一区二区| 亚洲婷婷噜噜| 国产精品网站在线播放| 国产91精品入口17c| 免费观看一级欧美片| 亚洲视频香蕉人妖| 日韩在线三级| 国产一区二区观看| www.亚洲天堂| 在线毛片网站| 日本丶国产丶欧美色综合| 已婚少妇美妙人妻系列| 99精品热视频| av观看免费在线| 日本成人在线电影网| 91精品久久久久久久久久久久久| 成人久久精品| 欧美激情视频在线观看| 亚洲综合影院| 欧洲成人免费aa| 91精品视频一区二区| 精品福利一区二区三区免费视频| 午夜成年人在线免费视频| 欧美日韩成人高清| av网站在线免费| 在线视频一区二区三| 日av在线不卡| 精品欧美一区二区精品久久| 国产精品一区在线观看乱码| 精品这里只有精品| 色综合天天综合给合国产| 国产精品欧美久久久久无广告| 欧美精品亚州精品| 丝袜老师在线| 永久免费毛片在线播放不卡| 美女尤物在线视频| 亚洲人成伊人成综合网久久久| 狠狠操一区二区三区| 亚洲精品一区中文| 精品久久ai电影| 亚洲精品免费在线视频| 中文高清一区| 中文字幕色一区二区| 国产日韩欧美激情| 伊人国产在线| 日韩欧美在线影院| 动漫一区二区三区| 国产精品一区二区三区不卡| 久久99精品国产.久久久久久| 日本在线观看a| 欧美高清激情brazzers| 欧美影视资讯| 91|九色|视频| 国产日产欧美一区二区视频| av在线二区| 久久精品欧美视频| 夜夜嗨一区二区| 亚洲一级免费观看| 精品久久一区二区三区| 亚洲一区二区视频| 美乳少妇欧美精品| 在线免费观看欧美| 99re6在线视频| 久久久久国产精品一区二区 | 欧美精品videossex性护士| 国产精品久久久久久久久久10秀| r级无码视频在线观看| 午夜精品国产更新| 久久国产三级| 日韩aⅴ视频一区二区三区| 日本高清不卡在线观看| 久久不见久久见中文字幕免费| 99视频在线免费播放| 亚洲国产成人久久| 亚洲制服少妇| 日本在线视频不卡| 6080日韩午夜伦伦午夜伦| 99精品免费视频| 日韩电影网站| 天天夜碰日日摸日日澡性色av| 日韩av片永久免费网站| 欧美一区二区三区白人| 韩国亚洲精品| 黄色漫画在线免费观看| 97国产在线观看| 亚洲国产综合色| 国内精品美女在线观看| 免费a级人成a大片在线观看| 精品国产免费一区二区三区| 欧美一二三区在线| 激情综合色播五月| 美女视频在线免费| 大肉大捧一进一出好爽动态图| 中文字幕亚洲综合| av在线综合网| 国产美女久久| 影院免费视频| 九色91视频| 最新国产成人av网站网址麻豆| 99这里只有精品| 少妇精品导航| 在线激情网站| 五月婷婷综合色| www.欧美三级电影.com| 国产精品伦理在线| 欧美限制电影| 白浆在线视频| 欧美福利网站| 欧美在线日韩精品| 91精品动漫在线观看| 日本成人黄色| 国产91色在线|免| 中文字幕日韩欧美| 欧美日韩亚洲综合在线| 91麻豆蜜桃一区二区三区| 麻豆精品一区二区综合av| 国产精品美女在线观看直播| 国产香蕉尹人视频在线| 日韩精品电影网站| 97在线日本国产| 精品国产乱码久久久久久闺蜜| 91美女在线视频| 另类亚洲自拍| 真实原创一区二区影院| 久久天天久久| 婷婷在线视频观看| 人人超碰在线| 国产a级黄色大片| 国产一区二区久久久| 欧美韩国理论所午夜片917电影| 色拍拍在线精品视频8848| 国产亚洲综合色| 国产大陆a不卡| 激情欧美日韩| 日本在线电影一区二区三区| 欧美h版在线观看| 日本精品影院| xvideos.蜜桃一区二区| 草草在线视频| 91在线播放网站| 国产色在线 com| 春暖花开成人亚洲区| 天堂аⅴ在线最新版在线| julia中文字幕久久亚洲蜜臀| 99爱视频在线观看| 国产av人人夜夜澡人人爽| 91原色影院| 国产99re| 天堂在线免费av| 中文字幕电影在线| 国产欧美一区二区视频| 国产麻豆乱码精品一区二区三区 | 欧美三日本三级三级在线播放| 亚洲视频一区二区在线观看| 日韩欧美激情电影| 亚洲区欧美区| 亚洲欧洲二区| 麻豆视频免费在线观看| 国产传媒在线播放| 五月激情久久久| 亚洲一线二线三线视频| 久久天天躁狠狠躁老女人| 伊人色综合久久天天五月婷| 国产黄色片在线观看| 一区二区三区四区日韩| 亚洲色欲色欲www在线观看| 久久不射电影网| 狠狠爱免费视频| 欧美成人高清视频在线观看| 国产亚洲永久域名| 色综合久久66| 国产精品久久久久久久久久久不卡 | 性视频1819p久久| 精品人妻一区二区三区四区在线 | 亚洲欧美精品一区二区| 色姑娘综合网| 色视频在线观看| 久久不见久久见国语| 中文字幕亚洲成人| 99九九热只有国产精品| 欧美性69xxxx肥| 亚洲精品高清视频| 黄网站免费入口| 亚洲日本黄色| 日韩在线不卡视频| 男男视频在线观看网站| 99久久精品免费观看国产| 成人在线免费观看网站| www欧美成人18+| 亚洲成人在线网| 亚州精品天堂中文字幕| 日本成人在线免费视频| 欧美9999|