Spring aop产生的代理对象执行流程及相关核心类的作用

spring aop产生的代理对象执行流程及相关核心类的作用

  • 入口:JdkDynamicAopProxy#invoke方法
  • 重要代码分析:
    • List<Object> chain = this.advised.getInterceptorsAndDynamicInterceptionAdvice(method, targetClass);
      • chain集合中存储的是【Advice】类封装之后MethodInterceptor或者想要的Adapter
        • 在该代码执行之前,我们已经针对该targetClass获取到了对应的【Advisor集合】,最终想要的是【MethodInterceptor集合】
        • Advisor--->getAdvice--->封装MethodInterceptor
          • Advice:
            • 五种通知
            • 通知会调用自定义编写的【增强代码】
          • Advisor和Advice的关系
            • 一个Advisor(PointcutAdvistor)是封装了一个Advice(五种通知),同时还封装成了对应的Pointcut对象(AspectJExpressionPointcut)
          • Advice和MethodInterceptor的关系是什么
            • Advice接口是MethodInterceptor父接口
            • Advice有五个实现类,也就是五种通知,但是只有三种是实现MethodInterceptor接口(AspectJAfter、AspectJAroundAdvice、AspectJAfterThrowingAdvice)
            • Advice另外的两个通知,要想和MethodInterceptor建立关系,需要使用适配器模式
              • AfterReturnningAdviceAdapter:AfterReturnningAdvice------>MethodInterceptor
              • ThrowsAdviceAdapter:AspectJMethodBeforeAdviceAdvice----->MethodInterceptor===》没有被用到
              • MethodBeforeAdviceAdapter:AspectJThrowsAdviceAdvice----->MethodInterceptor
          • Advice为什么要封装成MethodInterceptor
            • MethodInterceptor提供了一个接口功能叫intercept,使用此方法完成执行方法的拦截,方便执行增强功能;
            • MethodInterceptor相当于针对五钟通知有五个实现类,每个实现类都需要去完成方法拦截和【方法顺序的控制】
          • 一个目标对象可以被多个增强功能去增强,最终只会产生一个代理对象
            • 多个增强功能的执行顺序是如何保证的呢?
              • 【不同通知类型】的执行顺序是通过MethodInterceptor实现类去保证的;
              • 【同种通知类型】的执行顺序是通过对advice的加载顺序(xml顺序或者注解处理的顺序)去保证的;
        • ReflectiveMethodInvocation的解析:
          • 由它完成MethodInterceptor拦截到的方法是应该如何一个一个的执行
          • 编写流水线执行流程
          • 它将Advice封装成一个调用链
                        invoke方法就是调用被增强类的方法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值