欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring使用三級緩存解決循環(huán)依賴的情況

 更新時間:2025年09月10日 09:40:26   作者:java葉新東老師  
Spring 2.6后默認(rèn)禁用循環(huán)依賴,啟動時報錯;可通過@Lazy注解或配置啟用,三級緩存分別存儲完整Bean、部分注入對象和未注入對象,解決依賴注入問題

前言

在spring 2.6之前的版本中,默認(rèn)都是支持循環(huán)依賴的,也就不會報錯,在2.6版本之后默認(rèn)禁用了循環(huán)依賴;可通過以下方式開啟循環(huán)依賴

spring:
  main:
    allow-circular-references: true # 開啟循環(huán)依賴, false (默認(rèn))表示禁用循環(huán)依賴

復(fù)現(xiàn)

比如有以下2個類,A引用了B,B引用了A;

  • A.java
@Service
public class B{
 @Autowried
  private B b;
}
  • B.java
@Service
public class B{
 @Autowried
  private A a;
}

默認(rèn)情況下啟動spring就會拋出循環(huán)依賴的異常

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

┌─────┐
|  a (field private com.spring.service.B com.spring.service.A.b)
↑     ↓
|  b (field private com.spring.service.A com.spring.service.B.a)
└─────┘


Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

三級緩存

先說下三級緩存的作用

  • 一級緩存:存放實例化且屬性已注入完成的Bean(完整對象)
  • 二級緩存:存放不完整的對象(屬性已注入了一部分,未全部注入完成)
  • 三級緩存:存放剛實例化的空對象(屬性未注入)

  • 三級緩存的執(zhí)行流程如下:

解決

這里有2種解決方案

1、添加懶加載注解 @Lazy

用法如下

@Service
public class B {

    @Autowired
    @Lazy
    private A a;
}

2、啟用循環(huán)依賴的配置

在application.yml 文件加上以下配置即可

spring:
  main:
    allow-circular-references: true

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java多線程實現(xiàn)的兩種方式

    Java多線程實現(xiàn)的兩種方式

    本文主要介紹了Java多線程實現(xiàn)的兩種方式:繼承Thread類、實現(xiàn)Runnable接口。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 使用Netty進(jìn)行編解碼的操作過程詳解

    使用Netty進(jìn)行編解碼的操作過程詳解

    這篇文章主要介紹了使用Netty進(jìn)行編解碼的操作過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Redisson分布式鎖的源碼解讀分享

    Redisson分布式鎖的源碼解讀分享

    Redisson是一個在Redis的基礎(chǔ)上實現(xiàn)的Java駐內(nèi)存數(shù)據(jù)網(wǎng)格(In-Memory?Data?Grid)。Redisson有一樣功能是可重入的分布式鎖。本文來討論一下這個功能的特點以及源碼分析
    2022-11-11
  • Maven  pom.xml與settings.xml詳解

    Maven pom.xml與settings.xml詳解

    這篇文章主要介紹了Maven pom.xml與settings.xml詳解的相關(guān)資料,這里對pom.xml與setting.xml詳細(xì)的研究說明,需要的朋友可以參考下
    2016-12-12
  • java實現(xiàn)八皇后問題示例分享

    java實現(xiàn)八皇后問題示例分享

    這篇文章主要介紹了java實現(xiàn)八皇后問題示例,八皇后問題,是一個古老而著名的問題,是回溯算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾于1848年提出
    2014-03-03
  • SpringBoot?整合mapstruct的實現(xiàn)步驟

    SpringBoot?整合mapstruct的實現(xiàn)步驟

    這篇文章主要介紹了SpringBoot整合mapstruct,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • java基礎(chǔ)之泛型知識點總結(jié)

    java基礎(chǔ)之泛型知識點總結(jié)

    這篇文章主要介紹了java基礎(chǔ)之泛型知識點總結(jié),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • springboot項目突然啟動緩慢的解決

    springboot項目突然啟動緩慢的解決

    這篇文章主要介紹了springboot項目突然啟動緩慢的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java?中向?Arraylist?添加對象的示例代碼

    Java?中向?Arraylist?添加對象的示例代碼

    本文介紹了如何在 Java 中向 ArrayList 添加對象,并提供了示例和注意事項,通過掌握這些知識,讀者可以在自己的 Java 項目中有效地使用 ArrayList 來存儲和操作對象,需要的朋友可以參考下
    2023-11-11
  • Java中關(guān)鍵字final finally finalize的區(qū)別介紹

    Java中關(guān)鍵字final finally finalize的區(qū)別介紹

    這篇文章主要給大家分享的是 Java中final,finally,finalize 到底有什么區(qū)別,文章圍繞final,finally,finalize的相關(guān)資料展開詳細(xì)內(nèi)容,具有一定的參考的價值,需要的朋友可以參考一下
    2022-04-04

最新評論