AOP原理——链式调用通知方法

链式调用通知方法

在目标方法执行之前,会把所有的增强器转为MethodInterceptor类型的拦截器,变成一个拦截器链,根据这个拦截器链会创建出CglibMethodInvocation对象,进而调用这个对象的proceed()方法来触发拦截器链
在这里插入图片描述
返回InterceptorList拦截器链并缓存起来
在这里插入图片描述
代理对象获取到拦截器链
在这里插入图片描述
接着会创建CglibMethodInvocation对象,把拦截器链、目标方法、目标对象等相关信息传入,调用proceed()方法触发拦截器链的执行
在这里插入图片描述
proceed()方法
在这里插入图片描述
获取拦截器对象执行invoke方法
在这里插入图片描述

invoke方法里面有一个invocation对象,它是一个ThreadLocal类的对象,同一个线程共享数据,即把MethodInvocation共享。这里的MethodInvocation就是CglibMethodInvocation
在这里插入图片描述
共享CglibMethodInvocation对象之后,会继续调用CglibMethodInvocationproceed方法
在这里插入图片描述
索引自增,获取的第二个拦截器
在这里插入图片描述
每次执行proceed方法,索引就会自增获取到下一个拦截器,然后拦截器又会调用invoke(this)方法,进而调用CglibMethodInvocationproceed方法,又可以获取到下一个拦截器,周而复始。

在这里插入图片描述
在这里插入图片描述
直到执行到最后一个拦截器
在这里插入图片描述
前置通知调用完成,进而调用目标方法
在这里插入图片描述
目标方法执行完成后,会返回到上一个的拦截器去执行对应的通知方法,然后继续返回到上一层

在这里插入图片描述
链式获取每一个拦截器,拦截器执行invoke方法,每一个拦截器等待下一个拦截器执行完成返回以后再来执行米拦截器链的机制,保证通知方法与目标方法的执行顺序。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值