Spring的 Bean的创建及循环依赖问题(IOC和AOP) 图文流程

循环依赖:

 

 

处理过程:

getSingleton(A)

  doCreateBean(A)

    instance(A)

    添加三级缓存A

    populate(A)

      Inject(B)

        getSingleton(B)

          doCreate(B)

            instance(B)

            添加三级缓存B

            populate(B)

              inject(A)

                getSingleton(A)

                  三级缓存中获取到getEarlyReference,对A进行提前包装,把包装后的A移除3级缓存,放入耳机缓存      

            initlize(B):对B进行包装

           完成B的初始化,添加到一级缓存,移除二三级缓存

    initlize(A):发现已经包装过不再重复代理

  完成A的初始化并添加到一级缓存,移除二三级缓存

返回A实例

解决循环依赖的流程:粉色代表处理getA的过程,黄色代表处理B的过程,蓝色代表获取B的时候处理A的过程

 

 

 其中比较绕的就是getSingleton(beanName,singletonFactory)的递归,建议大家多读几遍代码

里面还用到了一些技巧例如AOP动态代理的实现及函数式接口的使用,

后续会把这些技巧原理的文章链接更新到这里

 

 

            

 

posted @ 2022-03-30 21:56  有一个小梦想  阅读(109)  评论(0编辑  收藏  举报