在上一篇中我們已經簡單的介紹了用xml的方式聲明事務,spring中除了上述方式外,還可以直接使用注解的方式管理事務,也就是通過@Transactional注解對需要的事務進行事務管理的。@Transactional注解可以對類或者方法進行标注。下面我們使用測試用例來示範@Transactional注解的具體使用。
因為@Transactional注解有預設的事務屬性,是以隻需要添加上述注解即可完成對事務的管理。但有一個問題我們要注意,就是雖然上述注解有預設事務功能,但是我們知道,事務的注解底層是通過AOP的方式實作事務管理的,是以我們還需要的配置spring中的xml,使之讓spring支援對@Transactional注解的支援。具體配置如下:
上述配置是最簡單的配置,實際上标簽還有别外兩個屬性,下面我們看一下這兩個屬性的具體功能。
下面我們看一下@Transactional注解的相關預設屬性都有哪些。
- 事務傳播行為--:PROPAGATION_REQUIRED
- 事務隔離級别--:ISOLATION_DEFAULT
- 讀寫事務屬性--:讀/寫事務
- 逾時時間--:依賴底層的事務屬性預設值
- 復原設定--:運作期異常復原
上述介紹的是@Transactional注解的預設設定,雖然很常用,但不一定能滿足我們所有的需求,是以,spring還提供我們手動設定上述預設注解的功能。具體的配置如下:
下面我們介紹一下@Transactional注解的注意事項
- @Transactional注解可以被應用于接口定義接口方法、類定義、和類的public方法上。但spring建議我們将@Transactional注解最好标注在業務類的上。這是因為注解不能被繼承,是以,如果我們将@Transactional注解标注在接口上時,那麼它的子類由于無法繼承,是以,此時的子類,spring是不會進行事務管理的。
- 如果一個類已經使用了@Transactional注解,這時spring就會将這個類中所有的public方法上都添加事務管理,如果我們此時又在public方法上添加的方法級别的@Transactional注解,那麼spring預設會用方法的注解覆寫類上面的@Transactional注解。