Spring aop事务代理对象通过TransactionInterceptor处理目标方法事务过程,cglib方式
来源:互联网 发布:win10网络共享文件夹 编辑:程序博客网 时间:2024/09/21 06:35
我们都知道,spring aop主要是通过动态代理实现,而动态代理对象的产生主要是通过CGLib,而CGlib代理对象的方法内容的增强主要是在
MethodInterceptor的intercept(),如果不熟悉CGlib的同学请先熟悉CGBlib的使用。
Spring对CGLib进行了一些封装,如DynamicAdvisedInterceptor继承自CGLib的MethodInterceptor,它的intercept()是所以事务代理对象增强代码的入口。Intercept()对事务的增强主要通过调用TransactionInterceptor的Invoke()方法。具体内容如下:
1、 TransactionInterceptor的invoke(finalMethodInvocation invocation)中的invocation实例是CGLibProxy.CGlibMethodInterceptor,
Invoke()方法干的事情是:
1) 获取代理方法的实际类,
2) 调用TransactionAspectSupport的invokeWithinTransaction()
2、 TransactionAspectSupport的invokeWithinTransaction()主要干的事情是:
1) 获取通过TransactionAttributeSource.getTransactionAttribute()获取这个方法和类TransactionAttribute(事务属性)
2) 获取PlatformTransactionManager
3) 获取代理方法的字符串ID
4) 执行createTransactionIfNecessary()方法创建事务
5) 执行InvocationCallback实例的proceedWithInvocation()方法
6) 如果出现异常执行completeTransactionAfterThrowing(),进行事务回滚处理
7) 执行commitTransactionAfterReturning()提交事务。
3、 proceeWithInvocation()主要干的事情是:
1) 执行MethodInvocation(ReflectiveMethodInvocation)实例的procees()方法
4、 ReflectiveMethodInvocation的proceed()方法主要干的事情是:
1) 判断当前是否还有TransactionInterceptor需要执行,如果没有,则执行invokeJoinpoint()方法执行代理目标方法的方法。
2) 从interceptorsAndDynamicMethodMatchers获取下一个需要执行的interceptor,并执行
5、 createTransactionIfNecessary()主要干的事情是:
1) 通过AbstractPlatformTransactionManager.getTransaction()获取TransactionStatus
2) 通过调用prepareTransactionInfo()返回TransactionInfo
6、AbstractPlatformTransactionManager.getTransaction()主要的事情是:
1)执行doGetTransaction()获取事务对象transaction
2)判断transaction对象是否存在,如果存在则调用handleExistingTransaction()方法处理已存在事务,即根据事务定义的传播行为和隔离性做各种策略处理。
3)判断事务是否超时
4)事务传播行为是否定义为:PROPAGATION_MANDATORY,如果是则抛该方法需要在事务环境中执行的异常
5)如果该事务传播行为是require_new或者nested,或者reqired,则执行suspend()获取SuspendedResourcesHolder
6)调用doBegin()进行具体事务操作
- Spring aop事务代理对象通过TransactionInterceptor处理目标方法事务过程,cglib方式
- spring aop 通过获取代理对象实现事务切换
- Spring aop 通过获取代理对象实现事务切换
- Spring强制使用CGLIB代理事务
- Spring强制使用CGLIB代理事务
- Spring强制使用CGLIB代理事务
- Spring Aop cglib代理方法调度顺序
- Spring AOP与事务代理机制
- Spring AOP 代理事务及 事务隔离级别
- Spring进阶之路(10)-Advice简介以及通过cglib生成AOP代理对象
- @Transactional与spring通过aop传播事务
- Spring Hibernate使用TransactionInterceptor声明式事务配置
- Spring Hibernate使用TransactionInterceptor声明式事务配置
- Spring-AOP和事务实践(注解方式
- spring aop事务通知(切面异常处理)
- 获得spring的指定目标对象,执行指定方法(JDK动态代理,cglib动态代理,Dubbo-Javassist代理)
- spring事务 spring事务代理
- spring事务的代理方式的实现
- 训练30-HTML 添加表单
- Abbyy Cup 2.0
- 一、JSP基本语法
- 00:00:00计时器
- Spring 继承quartz定时器
- Spring aop事务代理对象通过TransactionInterceptor处理目标方法事务过程,cglib方式
- tomcat启动出现Preparing launch delegate的可能原因之一
- 排序--快速排序学习
- 设计模式学习——单例模式
- 《谍影重重5》黑科技之即席踪迹查询
- Android Studio使用——GsonFormat插件
- Hashmap实现原理
- acdrem1083 人民城管爱人民 DP
- 动态规划之最长子序列长LCS