Spring 循环依赖

一、概念

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 循环依赖)