總述
spring的事務(wù)時由aop來實現(xiàn)的,首先要生成具體的代理對象双肤,然后按照aop的整套流程來執(zhí)行具體的操作邏輯施掏,正常情況下钮惠,要通過通知來完成核心功能,但是事務(wù)不是通過通知來實現(xiàn)的其监,而是通過一個TransactionInterceptor類實現(xiàn)萌腿,然后調(diào)用invoke()方法來實現(xiàn)具體邏輯。
詳細
- 先做準(zhǔn)備工作抖苦,解析各個方法上事務(wù)相關(guān)的屬性毁菱,根據(jù)具體的屬性來判斷是否開始新事務(wù)
- 當(dāng)需要開啟的時候,獲取數(shù)據(jù)庫連接锌历,關(guān)閉自動提交功能贮庞,開啟事務(wù)
- 執(zhí)行具體的sql邏輯操作
- 在操作過程中,如果執(zhí)行失敗了究西,那么會通過completeTransactionAfterThrowing來完成事務(wù)的回滾操作窗慎,回滾的具體邏輯是通過doRollBack方法來實現(xiàn),實現(xiàn)的時候也是要先獲取連接對象卤材,通過連接對象來回滾
- 如果執(zhí)行過程中沒有任何意外情況發(fā)生遮斥,那么通過completeTransactionAfterReturning來完成事務(wù)的提交操作,提交的具體邏輯是通過doCommit方法來實現(xiàn)扇丛,實現(xiàn)的時候也是要獲取連接术吗,通過連接對象來提交
- 當(dāng)事務(wù)執(zhí)行完畢之后需要清除相關(guān)事務(wù)信息cleanupTransactionInfo