在上一篇文章中,我們使用了聲明式事務來配置事務,使事務配置從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等。
在這裡運作和上一篇文章同樣的測試程式,我們會得到相同的結果