【Spring 注解驱动】学习笔记 05 - Spring AOP(五)AOP原理【AnnotationAwareAspectJAutoProxyCreator】执行时机

经过上篇文章完成了 AnnotationAwareAspectJAutoProxyCreator 的注册以及创建,本篇文章主要分析该后置处理器注册创建后所完成的功能。

参考资料

源码分析

继承关系图

在这里插入图片描述

1、传入配置类,创建 IOC 容器

IOCTest_AOP#test01()
在这里插入图片描述

2、注册配置类,调用 refresh() 刷新容器

AnnotationConfigApplicationContext#AnnotationConfigApplicationContext()
在这里插入图片描述

AbstractApplicationContext#refresh()

在这里插入图片描述
finishBeanFactoryInitialization() 完成 BeanFactory 初始化工作,注册剩下的单实例 Bean。

3、完成 BeanFactory 初始化工作流程详解

创建 Bean 的流程和上篇文章中的过程类似。

3.1、遍历获取容器中所有的 Bean,依次创建对象

调用流程:

  • DefaultListableBeanFactory#preInstantiateSingletons()
  • AbstractBeanFactory#getBean()
  • AbstractBeanFactory#doGetBean()
DefaultListableBeanFactory#preInstantiateSingletons()

在这里插入图片描述

AbstractBeanFactory#getBean()

在这里插入图片描述

AbstractBeanFactory#doGetBean()

在这里插入图片描述

3.2、创建 Bean(分析 AbstractBeanFactory#doGetBean()
3.2.1、先从缓存中获取当前 Bean

如果能获取到,说明 Bean 是之前被创建过的,直接使用,否则再创建。(只要创建好的 Bean 都会被缓存起来。)
在这里插入图片描述

3.2.2、创建 Bean

在这里插入图片描述
AbstractAutowireCapableBeanFactory#createBean()
在这里插入图片描述
resolveBeforeInstantiation() 希望后置处理器在此能返回一个代理对象,如果能返回代理对象就使用,如果不能就继续往下走流程。
在这里插入图片描述
此处 doCreateBean() 和上篇文章 3.5 的过程一致,在此就不再赘述了。

AbstractAutowireCapableBeanFactory#resolveBeforeInstantiation()

在这里插入图片描述
主要有两个方法:

  • applyBeanPostProcessorsBeforeInstantiation
  • applyBeanPostProcessorsAfterInitialization

在这里插入图片描述
在这里插入图片描述
applyBeanPostProcessorsBeforeInstantiation 方法中判断了当前 Bean 是否是 InstantiationAwareBeanPostProcessor 类型。

需要注意这里的判断:

  • BeanPostProcessor 是在 Bean 对象创建完成初始化前后调用的。
  • InstantiationAwareBeanPostProcessor 是在创建 Bean 实例之前先尝试用后置处理器返回对象的。

上面两个都是后置处理器,但是调用的时机不同。

AnnotationAwareAspectJAutoProxyCreator 父类也实现了 InstantiationAwareBeanPostProcessor,因此会在任何 Bean 创建之前先尝试返回 Bean 的实例(对应 3.2.1 的方法)。

综上,AnnotationAwareAspectJAutoProxyCreator 在所有 Bean 创建之前会有一个拦截,会调用 postProcessBeforeInstantiation() 方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MichelleChung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值