什么是循环依赖注入问题?
我们先看一段代码:
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);
}
}