天天看點

spring學習筆記(23)基于tx/aop配置切面增強事務

在上一篇文章中,我們使用了聲明式事務來配置事務,使事務配置從service邏輯進行中解耦出來。但它還存在一些缺點:

1. 我們隻針對方法名的特定進行攔截,但無法利用方法簽名的其它資訊定位,如修飾符、傳回值、方法入參、異常類型等。如果我們需要為同名不同參的同載方法配置不同僚務就會出問題了。

2. 事務屬性的配置串雖然能包含較多資訊,但配置較易出錯。

針對這些問題,我們可以基于schema,引入tx和aop的命名空間來改進我們的配置:

引入命名空間

tx\aop核心配置

這裡需要特别注意的是,我們需要在标簽中将proxy-target-class配置成true,否則會出現和上一篇文章相同的錯誤:我們定義的類無法轉換成代理類

這裡我們通過來配置我們的事務增強屬性。在标簽中,常見屬性及其說明如下,其中,除了name屬性是必選外,其他都是可選的:

屬性

說明

預設

允許值

name

比對方法名

必須聲明,至少為*

可使用*通配符

propagation

事務傳播行為

required

required,supports和mandatory和requires_new和not_supported和never和nested

read-only

設定目前事務是否隻讀

false

true,false

isolation

事務隔離級别

default

read_uncommitted和read_committed和repeatable_read和serializable

timeout

設定事務的逾時時間

-1

預設由頂層事務系統決定

rollback-for

内容為異常名,表示當抛出這些異常時事務復原,可以用逗号分隔配置多個

無預設值

可以使用異常名稱的片段進行比對如ception等

no-rollback-for

内容為異常名,表示當抛出這些異常時繼續送出事務,可以用逗号分隔配置多個

可以使用異常名稱的片段進行比對如ception等。

在這裡運作和上一篇文章同樣的測試程式,我們會得到相同的結果