spring 事物处理机制

本文深入探讨了Spring的事务处理机制,从ReflectiveMethodInvocation.proceed()开始,讲解了事务拦截器TransactionInterceptor如何在调用过程中参与,以及如何在实物上下文中通过动态代理实现事务管理。详细阐述了调用链路,包括ExposureInvocationInterceptor和JdkDynamicAopProxy等在事务处理中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ReflectiveMethodInvocation.proceed()
调用过程:

ReflectiveMethodInvocation 中的((MethodInterceptor) interceptorOrInterceptionAdvice).invoke(this)
会有一个拦截器去一调用,this关键字会回调
//都会回调ReflectiveMethodInvocation.proceed()
1 ExposeInvocationInterceptor–>invoke()
2 TransactionInterceptor–>invoke()–>invokeWithinTransaction(callBack)
3ReflectiveMethodInvocation.invokeJoinpoint()
4 AopUtils.invokeJoinpointUsingReflection()

首先需要运行在实物上下文环境,service的调用都是动态代理,例子中的是jdk动态代理,然后进过一系列的拦截器, 调用proceed() 最后调用
invokeJoinpoint() 最后执行目标类的方法
调用关系:

Daemon Thread [http-bio-8080-exec-2] (Suspended)
TransactionInterceptor1.proceedWithInvocation()line:96TransactionInterceptor(TransactionAspectSupport).invokeWithinTransaction(Method,Class,TransactionAspectSupportInvocationCallback) line: 260
TransactionInterceptor.invoke(MethodInvocation) line: 94
ReflectiveMethodInvocation.proceed() line: 172
ExposeInvocationInterceptor.invoke(MethodInvocation) line: 91
ReflectiveMethodInvocation.proceed() line: 172
JdkDynamicAopProxy.invoke(Object, Method, Object[]) line: 204
Proxy194.save()line:notavailableTestController.list(HttpServletRequest)line:151NativeMethodAccessorImpl.invoke0(Method,Object,Object[])line:notavailable[nativemethod]NativeMethodAccessorImpl.invoke(Object,Object[])line:57DelegatingMethodAccessorImpl.invoke(Object,Object[])line:43Method.invoke(Object,Object)line:601AnnotationMethodHandlerAdapterServletHandlerMethodInvoker(HandlerMethodInvoker).invokeHandlerMethod(Method, Object, NativeWebRequest, ExtendedModelMap) line: 176
AnnotationMethodHandlerAdapter.invokeHandlerMethod(HttpServletRequest, HttpServletResponse, Object) line: 440
AnnotationMethodHandlerAdapter.handle(HttpServletRequest, HttpServletResponse, Object) line: 428

TransactionInterceptor$1.proceedWithInvocation() line: 96

TransactionInterceptor(TransactionAspectSupport).invokeWithinTransaction(
Method, Class, TransactionAspectSupport$InvocationCallback) line: 260

TransactionInterceptor.invoke(MethodInvocation) line: 94

ReflectiveMethodInvocation.proceed() line: 172

ExposeInvocationInterceptor.invoke(MethodInvocation) line: 91

ReflectiveMethodInvocation.proceed() line: 172

JdkDynamicAopProxy.invoke(Object, Method, Object[]) line: 204

$Proxy194.save() line: not available
TestController.list(HttpServletRequest) line: 151

NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]

NativeMethodAccessorImpl.invoke(Object, Object[]) line: 57

DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
Method.invoke(Object, Object…) line: 601

AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker(HandlerMethodInvoker).invokeHandlerMethod(Method, Object, NativeWebRequest, ExtendedModelMap) line: 176

AnnotationMethodHandlerAdapter.invokeHandlerMethod(HttpServletRequest,
HttpServletResponse, Object) line: 440

AnnotationMethodHandlerAdapter.handle(HttpServletRequest, HttpServletResponse, Object) line: 428

DispatcherServlet.doDispatch(HttpServletRequest, HttpServletResponse) line: 925
— 待续

service 都被动态代理了
每次访问的时候都会调用
JdkDynamicAopProxy.invoke() 方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值