SpringBoot 開啟支持循環(huán)依賴

一、Spring 默認(rèn)支持的循環(huán)依賴類型

Spring 通過三級緩存機(jī)制,默認(rèn)支持單例 Bean 的 setter 注入和字段注入形式的循環(huán)依賴,但不支持構(gòu)造函數(shù)注入的循環(huán)依賴。

重點強(qiáng)調(diào):不支持構(gòu)造函數(shù)注入的循環(huán)依賴

二、驗證默認(rèn)開啟循環(huán)依賴支持

以下是一個簡單的示例,展示 Spring 默認(rèn)對循環(huán)依賴的支持:

1、創(chuàng)建兩個相互依賴的 Bean 類

import org.springframework.stereotype.Component;

@Component
public class BeanA {
    private BeanB beanB;

    // 使用setter方法注入
    public void setBeanB(BeanB beanB) {
        this.beanB = beanB;
    }

    public BeanB getBeanB() {
        return beanB;
    }
}

@Component
public class BeanB {
    private BeanA beanA;

    // 使用setter方法注入
    public void setBeanA(BeanA beanA) {
        this.beanA = beanA;
    }

    public BeanA getBeanA() {
        return beanA;
    }
}

2、創(chuàng)建一個測試類

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class CircularDependencyDemoApplication implements CommandLineRunner {

    @Autowired
    private BeanA beanA;

    @Autowired
    private BeanB beanB;

    public static void main(String[] args) {
        SpringApplication.run(CircularDependencyDemoApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("BeanA's BeanB: " + beanA.getBeanB());
        System.out.println("BeanB's BeanA: " + beanB.getBeanA());
    }
}

在上述代碼中,BeanA 和 BeanB 相互依賴,通過 setter 方法注入。當(dāng)你運行 CircularDependencyDemoApplication 時,Spring Boot 應(yīng)用能夠正常啟動,說明默認(rèn)情況下循環(huán)依賴是支持的。

三、禁止或強(qiáng)制開啟循環(huán)依賴

spring:
  main:
    allow-circular-references: true
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容