一.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.一般情況下...