天天看點

spring 事務_Spring使用注解聲明事務

在上一篇中我們已經簡單的介紹了用xml的方式聲明事務,spring中除了上述方式外,還可以直接使用注解的方式管理事務,也就是通過@Transactional注解對需要的事務進行事務管理的。@Transactional注解可以對類或者方法進行标注。下面我們使用測試用例來示範@Transactional注解的具體使用。

spring 事務_Spring使用注解聲明事務

因為@Transactional注解有預設的事務屬性,是以隻需要添加上述注解即可完成對事務的管理。但有一個問題我們要注意,就是雖然上述注解有預設事務功能,但是我們知道,事務的注解底層是通過AOP的方式實作事務管理的,是以我們還需要的配置spring中的xml,使之讓spring支援對@Transactional注解的支援。具體配置如下:

spring 事務_Spring使用注解聲明事務

上述配置是最簡單的配置,實際上标簽還有别外兩個屬性,下面我們看一下這兩個屬性的具體功能。

spring 事務_Spring使用注解聲明事務

下面我們看一下@Transactional注解的相關預設屬性都有哪些。

  • 事務傳播行為--:PROPAGATION_REQUIRED
  • 事務隔離級别--:ISOLATION_DEFAULT
  • 讀寫事務屬性--:讀/寫事務
  • 逾時時間--:依賴底層的事務屬性預設值
  • 復原設定--:運作期異常復原

上述介紹的是@Transactional注解的預設設定,雖然很常用,但不一定能滿足我們所有的需求,是以,spring還提供我們手動設定上述預設注解的功能。具體的配置如下:

下面我們介紹一下@Transactional注解的注意事項

  • @Transactional注解可以被應用于接口定義接口方法、類定義、和類的public方法上。但spring建議我們将@Transactional注解最好标注在業務類的上。這是因為注解不能被繼承,是以,如果我們将@Transactional注解标注在接口上時,那麼它的子類由于無法繼承,是以,此時的子類,spring是不會進行事務管理的。
  • 如果一個類已經使用了@Transactional注解,這時spring就會将這個類中所有的public方法上都添加事務管理,如果我們此時又在public方法上添加的方法級别的@Transactional注解,那麼spring預設會用方法的注解覆寫類上面的@Transactional注解。

繼續閱讀