Springboot循環依賴


背景

最近在使用Springboot做項目的時候,遇到了一個循環依賴的 問題。那什么是循環依賴呢,常見的一種情形就是在ServiceA中注入了ServiceB,在ServiceB中也注入了ServiceA。這種情況下,導致Spring在初始化的時候,無法決定先創建哪個Bean,從而導致了報錯。

解決方案

優化代碼

出現循環依賴,很大的可能性是代碼的設計問題,導致了類的方法之間的交叉使用。因此,可以考慮優化代碼,將公共的方法抽出來單獨封裝。

使用@Lazy注解

如果沒有時間在短時間內重構完成,可以在互相依賴的兩個Service上使用@Lazy注解,如下所示

@Component
public class ServiceA {
 
    @Autowired
    @Lazy
    private ServiceB serviceB;

}

使用setter注入

我們還可以使用setter注入。當依賴最終被使用時才進行注入,對當前代碼少做修改

@Component
public class ServiceA {
 
    private ServiceB serviceB;
 
    @Autowired
    public void setServiceB(ServiceB serviceB) {
        this.serviceB = serviceB;
    }
    
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM