AOP原理-AnnotationAwareAspectJAutoProxyCreator执行时机 || InstantiationAwareBeanPostProcessor

AnnotationAwareAspectJAutoProxyCreator => InstantiationAwareBeanPostProcessor

AOP原理-AnnotationAwareAspectJAutoProxyCreator执行时机 ||  InstantiationAwareBeanPostProcessor

 

   finishBeanFactoryInitialization(beanFactory)
   完成BeanFactory初始化工作
   创建剩下的单实例bean

*        1)、遍历获取容器中所有的Bean,依次创建对象getBean(beanName);
*           getBean->doGetBean()->getSingleton()->
*        2)、创建bean
*           【AnnotationAwareAspectJAutoProxyCreator在所有bean创建之前会有一个拦截,
              InstantiationAwareBeanPostProcessor,会调用postProcessBeforeInstantiation()】
*           1)、先从缓存中获取当前bean,如果能获取到,说明bean是之前被创建过的,直接使用,否则再创建;
*              只要创建好的Bean都会被缓存起来
*           2)、createBean();创建bean;
*              AnnotationAwareAspectJAutoProxyCreator 会在任何bean创建之前先尝试返回bean的实例
*              【BeanPostProcessor是在Bean对象创建完成初始化前后调用的】
*              【InstantiationAwareBeanPostProcessor是在创建Bean实例之前先尝试用后置处理器返回对象的】
*              1)、resolveBeforeInstantiation(beanName, mbdToUse);解析BeforeInstantiation
*                 希望后置处理器在此能返回一个代理对象;如果能返回代理对象就使用,如果不能就继续
*                 1)、后置处理器先尝试返回对象;
*                    bean = applyBeanPostProcessorsBeforeInstantiation():
*                       拿到所有后置处理器,如果是InstantiationAwareBeanPostProcessor;
*                       就执行postProcessBeforeInstantiation
*                    if (bean != null) {
                     bean = applyBeanPostProcessorsAfterInitialization(bean, beanName);
                  }
*
*              2)、doCreateBean(beanName, mbdToUse, args);真正的去创建一个bean实例;
上一篇:82、获取容器中的bean


下一篇:aop bean增强