一.生命周期
beanDefinition阶段:
1.加载生成beanDefinition。
2.执行BeanFactoryPostProcessor
bean生命周期实例化阶段:
1.实例化
执行构造器生成Java bean。
2.设置属性,依赖注入
3.初始化
执行BeanNameAware回调
执行BeanFactoryAware回调
执行applicationContext回调
执行BeanPostProcessor的before方法
执行InitialLization的回调
执行init方法
执行BeanPostProcessor after方法(aop在这个阶段)
4.销毁阶段
二.循环依赖怎么解
三级缓存去解。
A依赖B,B依赖A。
初始化流程如下:
发现一二三级都没有A,实例化A并放入到三级缓存,然后执行注入时发现依赖B。
此时触发B的实例化,B放入到三级缓存。接着注入B的依赖A,从三级缓存找,发现有A,于是调用三级缓存中的对象工厂获取对象(如果B是普通对象则返回普通对象,B做了aop代理则返回代理对象)。B拿到三级缓存中的A实例后,做注入,然后走后续的生命周期流程,包括aop织入的BeanPostProcessor处理。全部初始化执行完成后,将B放入到一级缓存。
然后返回到A,A拿到B的实例后就完成了注入。