Spring AOP 源码解析时序图
2021-07-20 18:55:16 238 举报
Spring AOP 源码解析时序图
作者其他创作
大纲/内容
继续向下调用
将 配置的所有 advised 通知都封装到 CglibAopProxy 类中的 DynamicAdvisedInterceptor 内部类中。然后调用其 intercept()方法,使用 new CglibMethodInvocation(xxx).proceed();的方式调用
ReflectiveMethodInvocation
调用 getCallbacks()方法
调用 createAopProxy().getProxy();来获得一个由Spring帮我们创建的对象的代理类
2
CglibAopProxy
DefaultAdvisorChainFactory
ProxyFactory
......等等
AfterReturningAdviceInterceptor 类中的 invoke()方法
JDK
调用getProxy()方法
备注:红线代表 JDK 动态代理方式实现 Spring AOP 黄线代表 Cglib 动态代理方式实现 Spring AOP
调用 ReflectiveMethodInvocation 类的 proceed() 方法,方法中通过调用 invoke()方法,判断链路中配置的 before、after、afterReturn等通知,然后调用相应方法中的 invoke() 方法,执行相关操作
使用 new CglibMethodInvocation(xxx).proceed();的方式,调用 ReflectiveMethodInvocation 类中的 proceed() 方法
Cglib
再次生成拦截器链
如果时序图对您有用,请在右上角给点个赞吧。5个赞我能多一张文件,支持作者继续画出更好的时序图给大家,谢谢大家支持配套博客介绍:请搜索CSDN 扛麻袋的少年
获取拦截器链后
AspectJAfterThrowingAdvice 类中的 invoke()方法
getProxy()
默认使用 JDK 动态代理
1.调用 getInterceptorsAndDynamicInterceptionAdvice()方法,获取配置的所有通知,组成一个链路(链路为 List)
new ArrayList<>将配置的所有通知,都 add 到该 list 中,生成一个 interceptorList(拦截器链)
Spring AOP 源码解析时序图
JDK 生成代理对象后,就会去执行 invoke()方法
使用Proxy.newProxyInstance()的方式创建一个代理对象
JdkDynamicAopProxy
invoke()
如果对象没有实现接口,则使用 Cglib 代理
扛麻袋的少年 2020-03-11
1
AspectJAfterAdvice 类中的 invoke()方法
getCallbacks()
AdvisedSupport
0 条评论
回复 删除
下一页