Spring框架入門必備教程-Spring事務(wù)(下篇)

使用 Spring?的事務(wù)注解管理事務(wù)(掌握)
通過@Transactional 注解方式,可將事務(wù)織入到相應(yīng)public 方法中,實(shí)現(xiàn)事務(wù)管理。
@Transactional 的所有可選屬性如下所示:
propagation:用于設(shè)置事務(wù)傳播屬性。該屬性類型為 Propagation?枚舉, 默認(rèn)值為Propagation.REQUIRED。
isolation:用于設(shè)置事務(wù)的隔離級(jí)別。該屬性類型為 Isolation?枚舉,默認(rèn)值為Isolation.DEFAULT。
readOnly: 用于設(shè)置該方法對(duì)數(shù)據(jù)庫的操作是否是只讀的。該屬性為boolean,默認(rèn)值為false。
timeout:用于設(shè)置本操作與數(shù)據(jù)庫連接的超時(shí)時(shí)限。單位為秒,類型為 int,默認(rèn)值為-1,即沒有時(shí)限。
rollbackFor:指定需要回滾的異常類。類型為 Class[],默認(rèn)值為空數(shù)組。當(dāng)然,若只有一個(gè)異常類時(shí),可以不使用數(shù)組。
rollbackForClassName:指定需要回滾的異常類類名。類型為 String[],默認(rèn)值為空數(shù)組。當(dāng)然,若只有一個(gè)異常類時(shí),可以不使用數(shù)組。
noRollbackFor:指定不需要回滾的異常類。類型為 Class[],默認(rèn)值為空數(shù)組。當(dāng)然,若只有一個(gè)異常類時(shí),可以不使用數(shù)組。
noRollbackForClassName:指定不需要回滾的異常類類名。類型為 String[],默認(rèn)值為空數(shù)組。當(dāng)然,若只有一個(gè)異常類時(shí),可以不使用數(shù)組。
需要注意的是,@Transactional 若用在方法上,只能用于public 方法上。對(duì)于其他非public 方法,如果加上了注解@Transactional,雖然 Spring 不會(huì)報(bào)錯(cuò),但不會(huì)將指定事務(wù)織入到該方法中。因?yàn)?Spring 會(huì)忽略掉所有非public 方法上的@Transaction 注解。
若@Transaction 注解在類上,則表示該類上所有的方法均將在執(zhí)行時(shí)織入事務(wù)。
實(shí)現(xiàn)注解的事務(wù)步驟:
復(fù)制trans_sale 項(xiàng)目,新項(xiàng)目trans_sale_annotation
1.?聲明事務(wù)管理器

2.?開啟注解驅(qū)動(dòng)

transaction-manager:事務(wù)管理器 bean 的id
3.?業(yè)務(wù)層public?方法加入事務(wù)屬性

使用 AspectJ?的 AOP?配置管理事務(wù)(掌握)
使用XML 配置事務(wù)代理的方式的不足是,每個(gè)目標(biāo)類都需要配置事務(wù)代理。當(dāng)目標(biāo)類較多,配置文件會(huì)變得非常臃腫。
使用XML 配置顧問方式可以自動(dòng)為每個(gè)符合切入點(diǎn)表達(dá)式的類生成事務(wù)代理。其用法很簡單,只需將前面代碼中關(guān)于事務(wù)代理的配置刪除,再替換為如下內(nèi)容即可。
Step1:復(fù)制項(xiàng)目
復(fù)制trans_sale 項(xiàng)目,并重命名為trans_sal_aspectj。在此基礎(chǔ)上修改。
Step2:maven 依賴pom.xml
新加入aspectj 的依賴坐標(biāo)

Step3:在容器中添加事務(wù)管理器

Step4:配置事務(wù)通知
為事務(wù)通知設(shè)置相關(guān)屬性。用于指定要將事務(wù)以什么方式織入給哪些方法。
例如,應(yīng)用到buy 方法上的事務(wù)要求是必須的,且當(dāng)buy 方法發(fā)生異常后要回滾業(yè)務(wù)。

Step5:配置增強(qiáng)器
指定將配置好的事務(wù)通知,織入給誰。

Step6:修改測試類
測試類中要從容器中獲取的是目標(biāo)對(duì)象。

最后奉上視頻教程??,視頻觀看效果更佳??!走過路過別忘素質(zhì)三連哦~~

