===^^===
《榴芒客服系统》是我们工作室开发的在线客服系统,欢迎下载试用:
《榴芒客服系统》
https://blog.csdn.net/look4liming/article/details/164755808
Spring为循环依赖问题设置了三级缓存。
当Spring发现BeanA依赖BeanB,BeanB又依赖BeanA时:
class A {
@Autowired
private B b;
}
class B {
@Autowired
private A a;
}
Spring会首先实例化BeanA,然后将其放入二级缓存,并标记好它是一个未完全装配好的Bean。
然后实例化BeanB,然后将BeanB的实例注入到BeanA中,再把BeanA的实例注入到BeanB中,然后移动到一级缓存中。
Setter注入和构造器注入无法解决循环依赖问题,会抛出BeanCurrentlyInCreationException。
三级缓存用户临时存储代理工厂产生的Bean,这些Bean还是会移动到一级缓存中。