• spring源码相关第四篇----------------------------spring aop实现原理源码解读


    spring aop实现原理源码解读

    这篇博客将会分为两点介绍aop的原理

    1.aop中的代理对象创建

    2.aop中代理对象以及其中各种通知相关调用操作

    refresh中的这个方法,为用户bean实例对象的创建开始,也是aop的开始,aop实现的代理对象有下面两个入口

    注意到此方法是创建,这里是常规aop代理对象创建的开始

    而最终都会进入到这里的方法进行代理对象的创建操作,jdk动态代理或者cglibc动态代理

    可以看到这里创建的代理对象默认是jdk动态代理对象

    最终将生成的代理的bean放入到bean对象缓存中,完成整个aop代理对象创建的整个流程。

    -------------------------以上完成aop相关代理对象创建流程,下面开始aop相关调用流程

    以上是aop创建的相关配置代码信息

     之后通过相关的代理类,调用到目标方法的时候,将进入到上图的这个方法,注意到这里的interceptorsAndDynamicMethodMatchers属性大小为因为有一个默认的ExposedInvocationInterceptor,其它分别为事务相关,前置通知相关,后置通知相关

    如果去除后置通知将会变成如下结果

    可见aop的相关通知与interceptorsAndDynamicMethodMatchers关联

    没调用一个aop通知之后又会回到这个方法,直到interceptorsAndDynamicMethodMatchers属性中的实现通知相关实现类调用完毕之后

                                                                    

     如上图调用完前置通知如上左图之后将会继续回到上面ReflectiveMethodInvocation类的invoke方法,同理后置通知会调用上述proceed方法之后执行后置通知相关操作如上右图所示,进而完成整个aop通知的执行,之后再调用目标方法,完成整个方法体的执行操作。aop原理讲解结束

  • 相关阅读:
    爬虫 爬取糗事百科热门板块的信息
    爬虫 爬取豆瓣高分电影信息
    django model之Meta选项
    ubuntu下无法获得锁 /var/lib/apt/lists/lock – open (11: 资源暂时不可用)
    django 通过数据库表名获取app名
    JS自定义字符串格式化函数
    django 制作上传图片并预览的效果
    Django序列化
    Django以ajax方式提交form
    Manjaro20 Linux安装VS Code
  • 原文地址:https://www.cnblogs.com/chaojibaidu/p/14984475.html
Copyright © 2020-2023  润新知