什么是循环依赖

就是A对象依赖了B对象,B对象依赖了A对象,构成了一个环

// A依赖了B
class A {
	public B b;
}

// B依赖了A
class B{
	public A a;
}

三级缓存

一级缓存

SingletonBeanRegistry

private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);

二级缓存

二级缓存(未初始化未填充属性提前暴露的Bean)

private final Map<String, Object> earlySingletonObjects = new HashMap<>(16);

三级缓存

三级缓存(Bean创建时提供代理机会的Bean工厂缓存)

private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);