1. 程式人生 > 其它 >SpringIOC迴圈依賴注入問題

SpringIOC迴圈依賴注入問題

技術標籤:errorspringjava

什麼是迴圈依賴注入問題?

我們先看一段程式碼:
AService

@Service
@Scope("prototype")
public class AService {
    @Autowired
    private BService aService;
}

BService

@Service
@Scope("prototype")
public class BService {
    @Autowired
    private AService aService;


}

當我們在多例模式下使用這樣的程式碼得話就會出現迴圈依賴注入的問題

我們執行的話會給我們報錯:

org.springframework.beans.factory.BeanCurrentlyInCreationException
那麼換單例的呢?我們嘗試了之後單例的是沒有任何問題的,怎麼結局多利下的迴圈依賴注入呢?

解決迴圈依賴注入問題

我們對程式碼進行一下改造
AService

@Service
@Scope("prototype")
public class AService {
    @Autowired
    private BService aService;

    public AService() {
        System.out.println("無參構造被建立");
    }

    public void setBService
(BService bService) { this.aService = bService; } }

BService

@Service
@Scope("prototype")
public class BService {
    @Autowired
    private AService aService;

    public void setAService(AService aService) {
        this.aService = aService;
    }
}

我們知道迴圈依賴問題出現是因為無法指定呼叫物件,所以我們手動區指定一下就可以了

Test

public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(Myconfig.class);
        AService aService = annotationConfigApplicationContext.getBean("AService", AService.class);
        BService bService = annotationConfigApplicationContext.getBean("BService", BService.class);
        aService.setBService(bService);
       bService.setAService(aService);

    }
}