动态代理对象运行分析-Cglib版
Cglib版在代理对象生成时,由方法和AOP上下文来决定具体使用哪个Callback,在运行时直接通过Callback进行方法调用。下面我们介绍两种类型的Callback:DynamicAdvisedInterceptor和FixedChainStaticTargetInterceptor,先从DynamicAdvisedInterceptor开始。
一.DynamicAdvisedInterceptor
提示:
DynamicAdvisedInterceptor是常用的Callback。
使用DynamicAdvisedInterceptor时序图如下:
方便大家查看,把在前篇中的ReflectiveMethodInvocation时序图拿过来:
下面这个图是ReflectiveMethodInvocation运行时形象表示。其中红点表示目标方法,执行时从圆外沿半径往圆心执行,每个圈表示一个织入逻辑,目标方法执行完后,原路返回。
ReflectiveMethodInvocation部分源代码截图:
二.FixedChainStaticTargetInterceptor
使用FixedChainStaticTargetInterceptor时序图如下:
FixedChainStaticTargetInterceptor源代码如下:
FixedChainStaticTargetInterceptor相比DynamicAdvisedInterceptor节省了查找和确认织入逻辑调用链的环节,相当于Cglib帮我们做的编译优化。到现在大家已经对运行时Cglib版和Jdk版动态代理运行有了清楚的认识,是不是还缺少点什么—应用实战,对,别急,待我们把AOP介绍完,在访问数据部分将事务和缓存的时候看看具体的使用。接下来我们看看Spring AOP对AspectJ是如何支持的,先从Spring-AOP基础设施介绍-AspectJ配套设施开始。
快速导航: