一、概念
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只是在创建原始对象经过一些操作之后的对象(对象)