针对于使用注解的方式进行依赖注入。
场景:A类中需要注入B类的实例对象,B类中需要注入A类的实例对象
* spring容器存在三级缓存 一级 二级 三级 先从一级缓存开始获取
* 三级 singletonFactories : 单例对象工厂的cache 其中的对象还没有初始化
* 二级 earlySingletonObjects :提前暴光的单例对象的Cache 。其中的对象可能只有部分属性被赋值【用于检测循环引用,与singletonFactories互斥】
* 一级 singletonObjects:单例对象的cache 其中的对象完成初始化
*
* 例如: 在创建了A对象之后,singletonFactories三级缓存中就存在此对象,虽然还并不完整(提前暴露)。
* 然后会进行初始化,为属性B赋值,此时在三个缓存中找不到该对象(假如该对象还没有创建),
* 然后对于B进行实例化并且初始化,初始化的时候发现需要依赖A对象,
* 可以从三级缓存中取到该对象并且进行赋值,然后将其放入二级缓存 earlySingletonObjects,
* B对象初始化完成,就会放入到一级缓存singletonObjects,
* 接下来就会继续进行A对象的初始化,可以从二级缓存中获取到A对象,从一级缓存中找到B对象进行赋值。
*
* A对象初始化完成之后,B对象中指向A对象的引用所对应的对象就是完整的A对象