循环依赖
- 什么是循环依赖
循环依赖就是指循环引用,当两个或者两个以上的bean互相持有对方,就会形成闭环。比如A依赖于B,B依赖于C,C依赖于A。
注意:循环调用是指对象之间的相互引用,并不是函数的调用
- 循环依赖场景
1、构造器的循环依赖
2、field属性的循环依赖
- 循环依赖的解决方式
- 构造器参数循环依赖
此依赖无法解决,只能抛出BeanCurrentlyIn CreationException异常表示循环依赖
- setter方式单例,默认方式
- 使用@PostContruct
@Component public class BeanA { @Autowired private BeanB beanB; @PostConstruct public void init(){ beanB.setBeanA(this); } public BeanB getBeanB() { return beanB; } public void setBeanB(BeanB beanB) { this.beanB = beanB; } }
- 构造器参数循环依赖
- 在SpringBoot中使用@Lazy注解来实现延迟加载