Spring Aop實現宣告式事務

2021-09-30 07:32:31 字數 2278 閱讀 5262

在系統的業務邏輯層中,每個業務會涉及到多個資料庫的操作,業務層其實是通過資料層的多個方法共同完成乙個業務,而這些方法要麼都執行,要麼都不執行,否則會造成資料的不一致,由此我們要對業務層進行事務管理。我們有以下兩種方式實現對業務的事務控制。 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...