aop的入口
在创建bean的全流程中,有一步是执行后置处理器,包含aop相关的处理器是其中的一种,位于初始化方法中,参见下图:
入上图红色框内,是后置处理器的逻辑。
详细入口
AbstractApplicationContext#refresh() 触发实例化对象
#finishBeanFactoryInitialization() > getBean("instaceA") > doGetBean()
> sharedInstance = getSingleton("instaceA", ObjectFactory<?> singletonFactory)
> singletonObject = singletonFactory.getObject();
> 这个getObject方法会被调用,间接触发createBean()被调用
> beanInstance = doCreateBean(beanName, mbdToUse, args)
> initializeBean("instaceB", exposedObject, mbd);
> 执行很多生命周期中的其他逻辑, 包括后置处理器PostProcessor,包括aop
initializeBean中会调用 BeanPostProcessor.postProcessAfterInitialization(),aop的处理器类就是其中的一个:
循环依赖中的前置
如果开启支持单例模式的循环依赖的话(默认开启),那么aop的执行步骤会发生变化,不再是上图红色框内,而是在蓝色框,populateBean()方法内。