一、背景
Spring 循环依赖。
多 debug 几遍,孰能生巧,越来越快。
二、流程图

解决循环依赖的关键就在于 singletonFactories 这个第三级缓存。它存放的是半成品的 bean,未进行属性赋值和依赖注入的 bean。
三、测试程序
package com.ongoing.demo.circular_dependency.autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* @description 测试循环依赖 基于注解类型的
*/
public class ApplicationDemo {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext =
new AnnotationConfigApplicationContext("com.ongoing.demo.circular_dependency.autowired");
}
}
package com.ongoing.demo.circular_dependency.autowired;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Cat {
@Autowired
Person person;
}
package com.ongoing.demo.circular_dependency.autowired;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Person {
@Autowired
Cat cat;
}
四、注意
Spring 只解决单例作用域下的属性注入循环依赖,构造器注入和原型作用域的循环依赖无法自动解决,会抛出异常。