AService:
实例化AService(new AService()) --> AService原始对象 --> 第三级缓存 <aService, AService的原始对象>
填充bService属性 --> 从单例池 --> 找不到 --> 创建 BService对应的Bean
填充cService属性 --> 从单例池 --> 找不到 --> 创建 CService对应的Bean
初始化后(AOP) --> aService代理对象
从二级缓存中取出AService的代理对象
添加单例池(第一级缓存)
BService:
实例化BService(new BService()) --> BService原始对象
填充aService属性 --> 从单例池 --> 找不到 --> 二级缓存 --> 找不到且发现依赖的aService正在创建中(发生了循环依赖) --> AOP 生成 aService 代理对象(从第三级缓存中拿到AService原始对象,用来做AOP) --> 将代理对象放入第二级缓存earlySingletonObjects<aService,AService代理对象>中
填充其他属性
初始化后
添加单例池(第一级缓存)
CService:
实例化CService(new CService()) --> BService原始对象
填充aService属性 --> 从单例池找 aService 对应的Bean --> 找不到 --> 二级缓存找 --> 找到AService代理对象
填充其他属性
初始化后
添加单例池(第一级缓存)
原文:https://www.cnblogs.com/panning/p/13946760.html