美文网首页
Spring 循环依赖

Spring 循环依赖

作者: 王乐生 | 来源:发表于2020-08-28 11:12 被阅读0次

一、概念

1、Spring管理的对象叫做Bean

构造AService对应的bean的过程如下:

1)扫描类----->BeanDefinition

2)aService = new Class(AService)();  // 原始对象  ---->放入Map中(生成一个lambda表达式)--------> 放入三级缓存

3)aService填充属性    ---------->BService 的Bean--------->在单例池中没有找到BService的Bean -------> 构造BService

4)Aware,init

5) BeanPostProcessor    // Bean的后置处理器:对前面生成的对象进行加功          进行AOP------->生成代理对象

6)(如果提前生成了AOP代理对象,就要先从二级缓存中拿到这个AOP之后生成的对象,再放入单例池)单例池(SingletonObjects,beanName:bean对象)

构造BService对应的bean的过程如下:

1)扫描类----->BeanDefinition

2)bService = new Class(BService)();  // 原始对象

3)bService填充属性    ---------->AService 的Bean--------->在单例池中找AService的Bean ------->暂时找不到AService还没有创建完  //在三级缓存中找AService------->lambda表达式 ------>执行-------->获得一个AOP之后的处理对象 -------> 放入二级缓存

4)Aware,init

5) BeanPostProcessor    // Bean的后置处理器:对前面生成的对象进行加功

6)单例池(SingletonObjects,beanName:bean对象)

即:

执行流程图

解决方法:

可以先创建一个原始对象(属性中暂时没有值),bean只是在创建原始对象经过一些操作之后的对象(对象)

解决方法 总结

相关文章

网友评论

      本文标题:Spring 循环依赖

      本文链接:https://www.haomeiwen.com/subject/mytlsktx.html