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代理对象
-
填充其他属性
-
初始化后
-
添加单例池(第一级缓存)