事務(Transactional):
在軟體開發領域,全有或全無的操作被稱作事務,事務具有四個特性:ACID。
A:Atomic 原子性 確定事務中的所有操作全部發生或全部不發生
C:Consistent 一緻性 事務的執行結果是确定
I:Isolated 隔離性 事務是彼此隔離的,避免同步讀寫相同資料
D:Durable 持久性 事務的結果是持久化的
Spring提供的事務管理器:
DataSourceTransactionManager 用于對jdbc和ibatis進行持久化的場景,實作了PlatformTransactionManager接口
利用IOC執行個體化配置如下:
事務屬性:
1、傳播行為:定義了何時要建立一個事務或何時使用已有的事務;
2、隔離級别:定義了一個事務可能受其他并發事務影響的程度;
3、復原規則:定義什麼異常下復原
4、事務逾時:自動復原時間
5、是否隻讀:對讀資料庫操作加聲明,系統就會對該操作優化
Spring中聲明事務的注解如下:
上面的配置告訴Spring檢查上下文中所有的Bean并查找使用@Transactional注解的Bean,不論注解級别是用在類級别上還是方法級别上,
找到Bean後會自動為它添加事務通知。
事務攔截器(AOP)
TransactionInterceptor調用invoke(final MethodInvocation invocation)進行事務處理
AnnotationTransactionAttributeSource調用findTransactionAttribute(Method method)和findTransactionAttribute(Class<?> clazz)方法
擷取TransactionAttribute(@Transactional注解中設定的五個事務屬性參數)
類SpringTransactionAnnotationParser調用parseTransactionAnnotation方法生成TransactionAttribute(存儲事務屬性)
如果事務屬性為空,則認為為非事務方法,直接調用原方法
CallbackPreferringPlatformTransactionManager調用execute(TransactionDefinition definition, TransactionCallback<T> callback)
TransactionCallback是處理事務的回調模闆類(接口)
CallbackPreferringPlatformTransactionManager 繼承自 PlatformTransactionManager
DataSourceTransactionManager實作的事務送出與復原方法:
依懶接口:java.sql.Connection
Connection最終實作的類:com.mysql.jdbc.ConnectionImpl.class

利用visualvm檢視JVM中的執行個體結果如下:
可以看出AOP代理和回調