SpringIOC循环依赖:
- invokeBeanFactoryPostPorcessors读取xml或注解配置,将Bean信息以对象的形式加载到BeanDefinitionMap<BeanName,BeanDefinition>
- BeanFactory获取对象,先查询一级缓存是否存在,不存在则开始创建Bean。
- 实例化:通过反射类的字节码文件,获取构造器,创建对象实例,并存入三级缓存半成品(即未注入)
- 依赖注入:注入B时,先通过BeanFactory判断一级缓存是否存在,不存在则创建;
- B创建好后,需要注入A属性,从1 2 3级缓存中寻找,三级缓存找到,即注入,注入成功B继续初始化操作,如果有AOP切面,生成代理类,存入一级缓存,B成品;
- B完成全部操作之前,会将A从三级缓存移动到二级缓存。操作完成以后,会同步删除三级缓存中的BObjectFactory
- A继续注入操作,可以从一级缓存直接获取成品B,注入属性,初始化,如果有AOP,生成代理类,完成A创建,存入一级缓存,删除二级缓存;