spring aop 原理解析

你需要知道的一些知识点

1. cglib和jdk动态代理 两种代理的原理
2. spring getbean和createbean的流程
3. aop的基本概念
4. springboot 的自动配置原理

spring aop 的原理概述

了解sping getBean过程的的一定知道 在createBean的过程中有各种各样的postProcess,
穿插在生成bean的各个时间段,这些都叫做 bean的增强,
而这些bean的增强 都会通过代理来生成最终的bean的代理对象,
就是说 我们在sping中使用的bean ,大多数可能都不是 原生bean,可能都是bean的代理对象。
那下面我们就拆开来 一个一个剖析 aop 的原理

springboot 启动加载aop配置类

springboot 启动的时候会加载 AopAutoConfiguration(ps springboot启动的时候会加载 autuconfigure中 spring.factories 中 配置的各个配置类)

在这里插入图片描述
在这里插入图片描述
上图该方法最终导入 AnnotationAwareAspectJAutoProxyCreator 类

aop配置类实现 postProcessBeforeInstantiation 和 postProcessAfterInitialization 方法

在这里插入图片描述
上图是AnnotationAwareAspectJAutoProxyCreator 的类图 我们发现 它实现了 InstantiationAwareBeanPostProcessor
不知道大家对 InstantiationAwareBeanPostProcessor 这个方法 熟悉吗 ,这个方法是 spring getbean的过程中 在bean instantiation的前后执行的方法。
我们继续在类AbstractAutoProxyCreator 中 看它的实现 postProcessBeforeInstantiation 和 postProcessAfterInitialization

postProcessBeforeInstantiation

在这里插入图片描述
在这里插入图片描述

上图 在这个方法中 会获取所有的通知并判断 是否和aop相关,如果相关的话会添加到如下map中
在这里插入图片描述
上面的三个图片的这些方法 发生在 bean 实例话的前面 ,如下图
在这里插入图片描述
点进去resolveBeforeInstantiation 方法 你会看在在这里处理了postProcessBeforeInstantiation
在这里插入图片描述
由上面的方法 我们发现在 实例话bean的前一个步骤中,aop的配置方法 将相关的通知bean全部放到了advisedBeans 中 方便后续使用

postProcessAfterInitialization 生成代理对象

接下来我们看看另外一个 postProcessAfterInitialization 方法
该方法故名思义 是放在在 bean 初始化之后执行 我们先看一下 这个方法 在创建bean的过程中 放生的时机吧

在这里插入图片描述
上图中 就是初始化bean 完成之后 增强的方法,该方法会循环调用 实现了postProcessAfterInitialization 的各个实现
接下来我们看一下 aop的配置方法是怎么实现的
在这里插入图片描述
我们直接进入 wrapIfNecessary
在这里插入图片描述
在这一步 我们发现 我们的上一个方法 添加的advisedBeans 最终排上了用场
获取到所有的通知 然后生成代理对象 最终返回
至此 aop的流程就算完结了

在处理bean的增强的时候实际上 循环的是 BeanFactory中的beanPostProcessors属性,那你知道这个属性是什么时候加载进去的吗

在这里插入图片描述

这就又和springboot 的 启动方法挂上钩了
在springboot run 方法中的 refresh 方法中
见下图

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值