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原理讲解结束