> 當兩個Bean緊緊相擁,Spring容器卻陷入死鎖——這是Java開發者的經典噩夢
某電商平臺凌晨上線時突然宕機,日志里反復滾動著`BeanCurrentlyInCreationException`的報錯。經排查,**優惠券服務與庫存服務在初始化時相互依賴**,形成致命閉環。這個價值百萬的故障案例,揭開了Spring循環依賴的潘多拉魔盒。
### 一、循環依賴的本質:Bean的死亡擁抱
#### 什么是循環依賴?
```mermaid
graph LR
A[OrderService] --> B[PaymentService]
B --> A
```
*(圖示:訂單服務依賴支付服務,支付服務又反向依賴訂單服務)*
當Bean A依賴Bean B,而Bean B又依賴Bean A時,Spring容器無法確定創建順序,陷入**初始化死循環**。
#### 三類循環依賴場景
1. **構造器循環依賴**:最危險的類型,Spring**無法自動解決**
2. **Setter循環依賴**:Spring通過**三級緩存**可解決
3. **字段注入循環依賴**:本質是Setter注入的特例
> Spring官方文檔警告:**構造器循環依賴是無解的,必須從設計層面規避**</