在系統的業務邏輯層中,每個業務會涉及到多個資料庫的操作,業務層其實是通過資料層的多個方法共同完成乙個業務,而這些方法要麼都執行,要麼都不執行,否則會造成資料的不一致,由此我們要對業務層進行事務管理。我們有以下兩種方式實現對業務的事務控制。 1.
傳統的方式:
每個業務方法都手動加上事務控制的**。 2.
採用aop
的方式。(事務處理可以看做是業務的乙個方面,我們採用
aop的方面對這方面進行統一的處理)
下面我們採取
zop的方式實現乙個對業務層事務的統一處理
2.1修改
目的是使其支援
標籤。
<?
xmlversion
="1.0"
encoding
="utf-8"
?>
<
beans
xmlns
=""xmlns:xsi
=""xmlns:tx
=""xmlns:aop
=""xsi:schemalocation
=" /spring-beans-2.5.xsd
/spring-tx-2.5.xsd
/spring-aop-2.5.xsd "
>
2.2配置宣告式事務
<
bean
name
="trasactionmanager"
class
="org.springframework.orm.hibernate3.hibernatetransactionmanager"
>
<
property
name
="sessionfactory"
ref="sessionfactory"
>
property
>
bean
>
<
tx:adviceid=
"myadvice"
transaction-manager
="trasactionmanager"
>
<
tx:attributes
>
<
tx:method
name
="add*"
propagation
="required"
rollback-for
="exception"
/>
<
tx:method
name
="edit*"
propagation
="required"
rollback-for
="exception"
/>
<
tx:method
name
="del*"
propagation
="required"
rollback-for
="exception"
/>
<
tx:method
name
="drop*"
propagation
="required"
rollback-for
="exception"
/>
<
tx:method
name
="register*"
propagation
="required"
rollback-for
="exception"
/>
<
tx:method
name
="*"
read-only
="true"
/>
tx:attributes
>
tx:advice
>
<
aop:config
>
<
aop:pointcut
expression
="execution(* com.struts.service.*.*(..))" id
="mycutpoint"
/>
<
aop:advisor
advice-ref
="myadvice"
pointcut-ref
="mycutpoint"
/>
aop:config
>
Spring AOP 宣告式事務
a.程式設計式事務管理 通過transaction template手動管理事務,實際應用中很少使用。b.使用xml配置宣告式事務 實際中用的很多因為 侵入性最小,而且是通過aop實現的。這裡我們講解一下宣告式事務 a.基於 tx 和 aop 命名空間的宣告式事務管理 其與spring aop 結合...
Spring AOP宣告式事務異常回滾
近日測試用例,發現這樣乙個現象 在業務 中,有如下兩種情況,比如 throw new runtimeexception 事物回滾 throw new exception 事物沒有回滾 自以為很了解事物,或許時間久遠的緣故,沒分析出來何故,遂查閱了下資料,寫下了如下的內容,供參考 1 spring的a...
springAOP註解式切面實現
org.springframework spring aop 4.3.11.release org.springframework spring aspects 4.3.11.release 我這裡監聽的是service層 component aspect public class testaspe...