spring是如何控制事务的提交和回滚
加上@Transactional注解之后,Spring可以启到事务控制的功能了,再正式执行方法前它会做一些操作,我们来看看
首先进入CglibAopProxy.class
的intercept方法或者JdkDynamicAopProxy.class
的invoke方法(继承接口方式),根据不同实现方法选择不同的动态代理类
CglibAopProxy.class
ReflectiveMethodInvocation.class
然后一步一步往下走来到invoke方法TransactionInterceptor.class
TransactionAspectSupport.class
的invokeWithinTransaction方法, invocation.proceedWithInvocation
spring事务是环绕通知@Transactional 事务注解是如何产生作用的?
如上所说,事务最开始是先进入CglibAopProxy.class
的intercept方法或者JdkDynamicAopProxy.class
的invoke方法,可以看出这2个类都是AOP增强类,所以@Transactional 事务注解才可以产生作用。
有哪些不同类型的事务
来到TransactionAspectSupport.class
的 createTransactionIfNecessary方法
AbstractPlatformTransactionManager.class
简单时序图
- 挂起:在新方法里面,不使用外部的事务环境
- 嵌套事务:
- 保存点: