生命周期
实例化spring容器
有一个BeanFactory会做接下来的事情
扫描加了注解或者配置的类
解析类
实例化beandefinition 放入map
第一次调用后置方法
反射并推断构造方法,使用构造方法区new一个实例
缓存、注解、合并db对象
提前暴露到二级缓存
属性注入----涉及循环依赖(其实是在create之前)
调用很多后置方法
完成aop
放入单例池
销毁
循环依赖
AB相互循环依赖
spring容器先去生成a的bean对象,检测到有循环依赖之后,就会在create a之前将a加入二级缓存,然后注入的时候检测需要b,就重新走一遍b的流程,b在注入的时候会去二级缓存的sigtonfacctory(单例工厂)对象中拿到a,将a放入三级缓存,然后完成注入。然后再走a的属性注入流程,拿到b注入到a里。
注意:
1、单例工厂会调用很多后置处理器处理这个类的返回。
2、为什么有三级缓存,为了提高效率,不需要每一次都是用单例工厂产生/加工一遍a
3、aop通常在属性注入之后,那么循环依赖的时候注入b的a怎么aop呢?
在单例工厂中相当于会提前调用aop的后置处理器,完成aop