spring使用三級緩存解決循環(huán)依賴的情況
前言
在spring 2.6之前的版本中,默認都是支持循環(huán)依賴的,也就不會報錯,在2.6版本之后默認禁用了循環(huán)依賴;可通過以下方式開啟循環(huán)依賴
spring:
main:
allow-circular-references: true # 開啟循環(huán)依賴, false (默認)表示禁用循環(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;
}
默認情況下啟動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 concurrency集合之CopyOnWriteArraySet_動力節(jié)點Java學(xué)院整理
CopyOnWriteArraySet基于CopyOnWriteArrayList實現(xiàn),其唯一的不同是在add時調(diào)用的是CopyOnWriteArrayList的addIfAbsent(若沒有則增加)方法2017-06-06
java實現(xiàn)切割wav音頻文件的方法詳解【附外部jar包下載】
這篇文章主要介紹了java實現(xiàn)切割wav音頻文件的方法,結(jié)合實例形式詳細分析了java切割wav音頻文件的相關(guān)原理、操作技巧與注意事項,并附帶外部jar包供讀者下載,需要的朋友可以參考下2019-05-05
SpringBoot請求發(fā)送與信息響應(yīng)匹配實現(xiàn)方法介紹
這篇文章主要介紹了SpringBoot請求發(fā)送與信息響應(yīng)匹配實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10
Springboot基于websocket實現(xiàn)簡單在線聊天功能
這篇文章主要介紹了Springboot基于websocket實現(xiàn)簡單在線聊天功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06
Java的Spring框架中DAO數(shù)據(jù)訪問對象的使用示例
這篇文章主要介紹了Java的Spring框架中DAO數(shù)據(jù)訪問對象的使用示例,分為在Spring中DOA與JDBC以及與Hibernate的配合使用兩種情況來進行演示,需要的朋友可以參考下2016-03-03
Mybatis-Plus最優(yōu)化持久層開發(fā)過程
Mybatis-plus(簡稱MP)是一個Mybatis的增強工具,在mybatis的基礎(chǔ)上只做增強不做改變,提高效率,自動生成單表的CRUD功能,這篇文章主要介紹了Mybatis-Plus最優(yōu)化持久層開發(fā),需要的朋友可以參考下2024-07-07

