美文网首页
【Spring源码】26.AOP之代理执行时切面的链式调用伪代码

【Spring源码】26.AOP之代理执行时切面的链式调用伪代码

作者: 天还下着毛毛雨 | 来源:发表于2023-03-18 11:09 被阅读0次

用伪代码的形式看看,所有切面执行时的总体流程是咋样的。

image.png
MethodInvocation.proceed(){
    AspectJAroundAdvice.invoke(MethodInvocation mi){  // 取出调用链第一个AspectJAroundAdvice,调他的invoke方法
        @Around(){ // 调Around
            //@Around() dosomething start....
            MethodInvocation.proceed(){ //调回核心方法
                MethodBeforeAdviceInterceptor.invoke(MethodInvocation mi){ // 取出调用链第二个MethodBeforeAdviceInterceptor,调他的invoke方法
                    @Before(){}; // 先调用@Before(),再调回核心方法
                    MethodInvocation.proceed(){ //调回核心方法
                        AspectJAfterAdvice.invoke(MethodInvocation mi){ // 取出调用链第三个AspectJAfterAdvice,调他的invoke方法
                            try {
                                MethodInvocation.proceed(){ //调回核心方法
                                    AfterReturningAdviceInterceptor.invoke(MethodInvocation mi){ // 取出调用链第四个AfterReturningAdviceInterceptor,调他的invoke方法
                                        MethodInvocation.proceed(){ //调回核心方法
                                            AspectJAfterThrowingAdvice.invoke(MethodInvocation mi){ // 取出调用链第五个AspectJAfterThrowingAdvice,调他的invoke方法
                                                try{
                                                    MethodInvocation.proceed(){ //调回核心方法
                                                        // 所有切面执行完成。执行原生方法
                                                        method.invoke()();
                                                    }
                                                }catch(E x){
                                                    @AfterThrowing(e){};//出现异常
                                                }
                                            }
                                        }
                                        @AfterReturning(){};
                                    }
                                }
                            }finally{
                                @After(){};
                            }
                        }
                    }
                }
            }
            //@Around() dosomething end...
        }
    }
}

相关文章

  • 链式调用原理

    常规写法: 链式调用: 实现原理: 调用方法之后返回自己,以实现链式调用 具体代码:

  • service调用过程分析

    测试代码: 在创建bean时,spring通过jdk动态代理为StockService创建动态代理类,上图为运行时...

  • Spring AOP DefaultAdvisorAutoPro

    Spring AOP源码目录 Spring AOP源码01:Jdk动态代理底层源码Spring AOP源码02:P...

  • RxBus 1

    代码 使用 原理分析 ofType 源码: 根据 简单操作符链式调用的实质S.F.C -> A 等价于,S -> ...

  • spring aop 之链式调用

    关关雎鸠,在河之洲。窈窕淑女,君子好逑。 概述 AOP(Aspect Orient Programming),我们...

  • 8.AOP(二)

    spring源码学习笔记,要点归纳和代码理解 前言 上一节学习了Spring动态代理的两种方式,jdk动态代理和C...

  • [iOS笔记]Swift中的可选链式调用的注意点

    通过可选链式调用访问属性 下面代码中的赋值过程是可选链式调用的一部分,这意味着可选链式调用失败时,等号右侧的代码不...

  • Spring学习之动态代理

    Spring学习之动态代理 前言 动态代理,是一种通过运行时操作字节码,以达到增强类的功能的技术,也是Spring...

  • C++虚继承实现链式调用的抽象

    链式调用 认为链式调用是一种代码风格,在一些情况下能够使代码容易理解。比如: 可以看到,如果变量比较复杂,通过链式...

  • Swift 实践篇之链式 UI 代码

    Swift 实践篇之链式 UI 代码 Swift 实践篇之链式 UI 代码

网友评论

      本文标题:【Spring源码】26.AOP之代理执行时切面的链式调用伪代码

      本文链接:https://www.haomeiwen.com/subject/xcvsrdtx.html