SpringIOC迴圈依賴注入問題
阿新 • • 發佈:2021-01-25
什麼是迴圈依賴注入問題?
我們先看一段程式碼:
AService
@Service
@Scope("prototype")
public class AService {
@Autowired
private BService aService;
}
BService
@Service
@Scope("prototype")
public class BService {
@Autowired
private AService aService;
}
當我們在多例模式下使用這樣的程式碼得話就會出現迴圈依賴注入的問題
那麼換單例的呢?我們嘗試了之後單例的是沒有任何問題的,怎麼結局多利下的迴圈依賴注入呢?
解決迴圈依賴注入問題
我們對程式碼進行一下改造
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);
}
}