chapter05 Spring對事務的支援

2021-08-30 14:15:42 字數 4521 閱讀 6817

一.spring

對事物支援所採用的策略

1.spring

統一各種事物的程式設計方式

aop事務的含義:

事務當作乙個切面,動態地織入到目標物件,形成乙個**物件。

二、spring

的事務機制

spring

支援宣告式事務。

spring

使用事務服務**和事務管理器(如hibernatetransactionmanager

)來支援事務服務。

spring

對事務的邊界多了一種巢狀事務(propagation_nested)。

propagation_nested

:如果客戶端啟動了事務t1

,那麼bean

啟動乙個巢狀在t1

中的子事務t2

;如果客戶端沒有啟動事務,那麼bean

會啟動乙個新的事務,類似於required_new 1

)事物的特性:

@1,傳播行為:呼叫者如何去影響被呼叫者的事物

@2,隔離性

@3,

唯讀事物

@4,超時操作

@5,回滾規則:spring

容器對bean

所丟擲的異常是否回滾事物

三、spring

中事務的使用 1

、spring

中使用hibernate

事務採用配置檔案的方(底層用的是用aop

的方式實現的)

step1

:配置資料來源

step2

:配置sessionfactory (

同上)

step3

:配置事務管理器hibernatetransactionmanager

class="org.springframework.orm.hibernate3.hibernatetransactionmanager">

step4:

配置dao

step5

:配置目標物件

step6

:配置事務**,為相關物件注入切面,需要將目標物件,事務管理其和傳播行為傳進來,客戶端再呼叫service

層物件來做事情是使用的不再是原來的service

,而是這個配置了事物的**物件

實現以上步驟的例項:

class="org.apache.commons.dbcp.basicdatasource">

com.mysql.jdbc.driver

jdbc:mysql://localhost:3306/tarena

root

1234

class="org.springframework.orm.hibernate3.localsessionfactorybean">

entity\account.hbm.xml

entity\stockaccount.hbm.xml

org.hibernate.dialect.mysqldialect

true

create-drop

class="org.springframework.orm.hibernate3.hibernatetransactionmanager">

parent="abstractdao" />

parent="abstractdao" />

class="service.spring.stockservicespringimpl">

如果不配置為抽象的。則需要在事物管理器中配置乙個目標物件

class="org.springframework.transaction.interceptor.transactionproxyfactorybean" abstract="true"> 1

)配置事務管理器

2)配置事物特性

propagation_required,readonly

前面乙個特性配置的是事物的傳播行為,必須的

後面配置的是事物的隔離特性。不是必須的。一般不常用

配置應用事物的方法,如果是*

代表所有方法都應用事物-->

propagation_required

propagation_required,-stockexception

+異常型別代表提交事物,-

異常型別代表回滾事物

hirbernate

對執行時異常才會回滾事物,而對檢測異常會提交事物,所以在設定異常處理規則時要注意該異常是否需要回滾事物

配置使用了事物管理器的目標物件,繼承上面的事務管理器- - >

3)配置目標物件

target">

事務屬性描述格式:

傳播行為,隔離級別,唯讀事務(read-only)

,回滾規則

在預設情況下,spring

的容器對於非受查異常(服務模組中丟擲的非受查異常),會回滾事務。對於受查異常,會提交事務。

如果即種受查異常,也要回滾事務,可以用「-

異常型別「

來宣告。同樣,對於非受查異常,如果不要求回滾事務,可以用"+

異常型別"

來宣告。

如何簡化事務配置?

採用標註的方式(jdk

要求是1.5

以上的)spring

管理hirbernate

事物

1.

首先引入命名空間

<?

xml

version

="1.0"

encoding

="utf-8"

?>

<

beans

xmlns

=""xmlns:xsi

=""xmlns:aop

=""xmlns:tx

=""xsi:schemalocation="

/spring-beans-2.0.xsd

/spring-tx-2.0.xsd

/spring-aop-2.0.xsd

">

<

bean id=

"datasource"

class

="org.apache.commons.dbcp.basicdatasource"

>

<

property

name

="driverclassname"

>

<

value

>

com.mysql.jdbc.driver

value

>

property

>

<

property

name

="url"

>

<

value

>

jdbc:mysql://localhost:3306/test

value

>

property

>

<

property

name

="username"

>

<

value

>

root

value

>

property

>

<

property

name

="password"

>

<

value

>

root

value

>

property

>

bean

>

<

bean id=

"mysessionfactory"

class

="org.springframework.orm.hibernate3.localsessionfactorybean"

>

<

property

name

="datasource"

>

<

ref

bean

="datasource"

/>

property

>

<

property

name

=>

<

list

>

<

spring 05 屬性注入

spring屬性注入 autowired resource autowired 自動裝配 根據類的型別進行自動裝配,無需在類中指定set方法。但出現的問題是如果含有多個同樣的型別,如果不知道名稱則會報錯。原因很簡單 程式分不清楚你要裝入的是哪個型別。指定裝入型別的方式 1 在類的宣告除指定名字 re...

spring的新註解05

建立乙個配置類,它的作用和bean.xml是一樣的 configuration 作用 指定當前類是乙個配置類 componentscan 作用 用於通過註解指定spring在建立容器時所要掃瞄的包 屬性 value 用於指定建立容器時要掃瞄的包 bean 作用 用於把當前方法的返回值作為bean物件...

關於 Chapter 05 變數的更多內容分析

5.1型別轉換 1.無論什麼型別,所有的資料都是一系列的位,即一組0和1。變數的含義是通過解釋這些資料的方式來傳達的。最簡單的示例是char型別,這種型別用乙個數字表示unicode字符集中的乙個字元。實際上,這個數字與ushort的儲存方式相同 他們都是儲存0 65535之間的數字。2.一般情況下...