Spring使用AOP來實現聲明式事務,Spring在默認情況下回對接口使用JDK動態代理技術,對具體實現類使用Cglib動態代理技術。
在切面配置的時候使用到的@Aspect注解,使用的是Aspectj框架的切面表達式,這個框架是一個由Java開發的基于靜態代理的AOP框架。Aspectj支持的功能更加強大,支持對字段、POJO類進行增強,而Spring只支持對方法級別進行增強。引起Spring中還是采用動態代理的方式,但是會用到Aspectj框架中的切面表達式。
Spring基于方法級別的動態代理增強五種方式:
- 前置增強
- 后置增強
- 環繞增強
- 異常拋出增強
- 引介增強:為目標類添加新的方法和屬性。
**聲明式事務通過環繞增強來實現:**在目標方法執行前開啟事務,在目標方法執行之后提交或者回滾事務。
## 事務傳播行為
在@Transactional注解的propagation屬性中指定。
Spring支持7種事務傳播行為,用于確定客戶端(Service1)與被調用端(Service2)的事務邊界。
- PROPAGATION\_REQUIRED:方法必須在一個事務中運行,沒有的話重啟開啟一個事務。
- PROPAGATION\_SUPPORTS:方法不用在一個事務中運行。
- PROPAGATION\_MANDATORY:必須在一個事務運行,沒有拋出異常。
【參考】
- [Spring事務傳播行為 - 掘金 (juejin.cn)](https://juejin.cn/post/6844903600943022088)
- 第一章 Java基礎
- ThreadLocal
- Java異常體系
- Java集合框架
- List接口及其實現類
- Queue接口及其實現類
- Set接口及其實現類
- Map接口及其實現類
- JDK1.8新特性
- Lambda表達式
- 常用函數式接口
- stream流
- 面試
- 第二章 Java虛擬機
- 第一節、運行時數據區
- 第二節、垃圾回收
- 第三節、類加載機制
- 第四節、類文件與字節碼指令
- 第五節、語法糖
- 第六節、運行期優化
- 面試常見問題
- 第三章 并發編程
- 第一節、Java中的線程
- 第二節、Java中的鎖
- 第三節、線程池
- 第四節、并發工具類
- AQS
- 第四章 網絡編程
- WebSocket協議
- Netty
- Netty入門
- Netty-自定義協議
- 面試題
- IO
- 網絡IO模型
- 第五章 操作系統
- IO
- 文件系統的相關概念
- Java幾種文件讀寫方式性能對比
- Socket
- 內存管理
- 進程、線程、協程
- IO模型的演化過程
- 第六章 計算機網絡
- 第七章 消息隊列
- RabbitMQ
- 第八章 開發框架
- Spring
- Spring事務
- Spring MVC
- Spring Boot
- Mybatis
- Mybatis-Plus
- Shiro
- 第九章 數據庫
- Mysql
- Mysql中的索引
- Mysql中的鎖
- 面試常見問題
- Mysql中的日志
- InnoDB存儲引擎
- 事務
- Redis
- redis的數據類型
- redis數據結構
- Redis主從復制
- 哨兵模式
- 面試題
- Spring Boot整合Lettuce+Redisson實現布隆過濾器
- 集群
- Redis網絡IO模型
- 第十章 設計模式
- 設計模式-七大原則
- 設計模式-單例模式
- 設計模式-備忘錄模式
- 設計模式-原型模式
- 設計模式-責任鏈模式
- 設計模式-過濾模式
- 設計模式-觀察者模式
- 設計模式-工廠方法模式
- 設計模式-抽象工廠模式
- 設計模式-代理模式
- 第十一章 后端開發常用工具、庫
- Docker
- Docker安裝Mysql
- 第十二章 中間件
- ZooKeeper