查看aop源码做个简单的笔记,记录aop之cglib代理生成流程,包含两部分进行说明,一个是cglib把增强的通知植入的过程,还有一个是调用方法时执行的过程
一.把通知植入到cglib代理的过程
3:是把aop增强逻辑和目标方法添加到代理,会创建
targetDispatcher(StaticDispatcher)
aopInterceptor(DynamicAdvisedInterceptor) 包含了增强的逻辑
targetInterceptor(StaticUnadvisedExposedInterceptor) 包含了目标方法的逻辑
源码如下:
二.调用方法时的处理流程
此时调用某个方法时,会先走到 DynamicAdvisedInterceptor.intercept()
重点:
4:生成拦截器链
5:开始执行拦截器链
具体的生成拦截器链代码如下图:
每一种类型的advice都会生成一个拦截器方法,大家可以看下源码很简单。
3.以异常拦截器进行说明,他在拦截器链中的调用过程:
①AspectJAfterThrowingAdvice.invoke通过拦截器链走到这个方法,然后调用invoke
②AbstractAspectJAdvice.invokeAdviceMethod如果在处理过程有异常则走catch方法
③AbstractAspectJAdvice.argBinding 拼接异常拦截器需要的参数
④ AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs最后反射调用异常方法