




已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第 四 章,Spring AOP 的應(yīng)用,回顧,AOP的目的即在正常的業(yè)務(wù)操作之外增加的附加操作 通過切入點(pointcut)指名進行哪些切面(aspect)操作 ProxyFactoryBean interceptorNames targetName proxyInterfaces 攔截器(Interceptor),通知(Advice),和切面的不同(Aspect),2,AOP的應(yīng)用,事務(wù)切面 日志切面 其它附加操作切面,3,事務(wù)切面,在介紹事務(wù)切面之前,回顧網(wǎng)上銀行的項目,并使用Spring IOC注入業(yè)務(wù)實現(xiàn)類所需的sessionFactory 實現(xiàn)步驟和問題思考: 實現(xiàn)業(yè)務(wù)接口和業(yè)務(wù)實現(xiàn)類(AccountService、LogService) sessionFactory如何注入的,應(yīng)該注入給誰? 事務(wù)由誰來管理?,4,優(yōu)化,現(xiàn)在項目經(jīng)理提出需求,希望改進代碼的結(jié)構(gòu),達到如下目標: transfer方法(或其它業(yè)務(wù)方法)在執(zhí)行時,事務(wù)自動開始 在正確完成后,事務(wù)提交,并且關(guān)閉hibernate session 在出現(xiàn)RuntimeException(或其子類)異常時,事務(wù)回滾,并關(guān)閉hibernate session 其他異常,仍執(zhí)行提交關(guān)閉的操作,5,Spring的解決方案,方案A:使用事務(wù)攔截器并代理業(yè)務(wù)實現(xiàn)類 方案B:使用事務(wù)advice 和aspect 切面來實現(xiàn)事務(wù)攔截,6,方案A,第一步,改寫AccountService業(yè)務(wù)實現(xiàn)類 第二步,定義ProxyFactoryBean以返回AccountService代理對象 proxyInterfaces targetName interceptorNames 這里添加事務(wù)攔截器,7,事務(wù)攔截器,第三步定義事務(wù)攔截器,8, PROPAGATION_REQUIRED PROPAGATION_REQUIRES_NEW ,事務(wù)屬性以及 事務(wù)管理器,Show Time,修改perties,以便觀察Spring執(zhí)行過程 .springframework.aop=debug .springframework.transaction=debug .springframework.orm.hibernate3=debug,9,事務(wù)管理器,Spring由于需要為多種數(shù)據(jù)層的實現(xiàn)提供集成支持,針對不同的情況,定義了各種事務(wù)管理器,一定要選擇正確的事務(wù)管理器 比如: DataSourceTransactionManager 對應(yīng)JDBC事務(wù) HibernateTransactionManager 對應(yīng)Hibernate提供的事務(wù) JtaTransactionManager 對應(yīng)JTA事務(wù) 大多數(shù)事務(wù)管理器都需要設(shè)置dataSource(數(shù)據(jù)源)屬性,對于HibernateTransactionManager可以只設(shè)置sessionFactory屬性,10,事務(wù)屬性,常見的事務(wù)屬性有: 事務(wù)的傳播行為 事務(wù)的隔離級別 事務(wù)是否只讀 針對只讀事務(wù),Spring在某些情況下會提供優(yōu)化,11,事務(wù)的傳播行為,以下的定義可以在TransactionDefinition中找到 PROPAGATION_REQUIRED PROPAGATION_SUPPORTS PROPAGATION_MANDATORY PROPAGATION_REQUIRES_NEW PROPAGATION_NOT_SUPPORTED PROPAGATION_NEVER,12,事務(wù)的傳播行為,PROPAGATION_REQUIRED表示如果沒有事務(wù),則開始新的事務(wù),事務(wù)已經(jīng)存在,則加入當(dāng)前事務(wù) PROPAGATION_SUPPORTS 表示如果事務(wù)已經(jīng)存在,則加入當(dāng)前事務(wù),如果沒有事務(wù),不會開始新事務(wù) PROPAGATION_MANDATORY 表示必須有事務(wù)存在,并加入當(dāng)前事務(wù),否則拋出異常 PROPAGATION_REQUIRES_NEW 表示每次都開始一個全新事務(wù) PROPAGATION_NOT_SUPPORTED 表示不會開始或加入事務(wù) PROPAGATION_NEVER 表示不會開始或加入事務(wù),如果事務(wù)已存在,拋出異常,13,事務(wù)的隔離級別,以下的定義可以在TransactionDefinition中找到 ISOLATION_READ_UNCOMMITTED ISOLATION_READ_COMMITTED ISOLATION_REPEATABLE_READ ISOLATION_SERIALIZABLE,14,事務(wù)的隔離級別,首先明確隔離級別指的都是同一個事務(wù)中 ISOLATION_READ_UNCOMMITTED表示會讀取到未提交的數(shù)據(jù) ISOLATION_READ_COMMITTED表示讀取到的是已經(jīng)提交的數(shù)據(jù) ISOLATION_REPEATABLE_READ表示多次讀取的數(shù)據(jù)是相同的 ISOLATION_SERIALIZABLE表示就好像沒有別的用戶在修改數(shù)據(jù)庫中的數(shù)據(jù)一樣,15,如何使用隔離級別,對于大多數(shù)數(shù)據(jù)庫來說,事務(wù)的隔離級別是ISOLATION_READ_COMMITTED,我們不需要做更多的設(shè)置,就可以很好的工作了 將事務(wù)的隔離級別設(shè)置為ISOLATION_REPEATABLE_READ可以防止丟失更新,但這樣做會嚴重影響系統(tǒng)的并發(fā)性,因此更多地是采用樂觀鎖的形式 ISOLATION_SERIALIZABLE并非你想象中的鎖定一切!,16,繼續(xù)完成需求,第四步,完成LogService業(yè)務(wù)實現(xiàn)類及其代理對象的定義,修改事務(wù)攔截器 第五步,定義一個Advice實現(xiàn)ThrowsAdvice和MethodBeforeAdvice 以便處理日志和其它附加邏輯 第六步,將此Advice 添加至合適的位置,17,流程分析,當(dāng)事務(wù)攔截器中的設(shè)置如下時,18,PROPAGATION_REQUIRED PROPAGATION_REQUIRES_NEW,執(zhí)行順序,執(zhí)行AccountService代理的transfer方法 檢查此代理定義的所有攔截器(有事務(wù)攔截器,和一個Advice) 根據(jù)transfer方法事務(wù)的傳播規(guī)則(REQUIRED),開啟一個新的事務(wù)Tx_A,打開Session_A 因為Advice實現(xiàn)了MethodBeforeAdvice接口,因此首先執(zhí)行Advice中的before方法 Before方法中,使用了LogService代理的log方法 檢查LogService代理定義的攔截器(有事務(wù)攔截器) 根據(jù)log方法的傳播規(guī)則(REQUIRES_NEW),又開啟一個新的事務(wù)Tx_B,打開Session_B 執(zhí)行l(wèi)og方法 當(dāng)log方法成功執(zhí)行,Tx_B提交,Session_B關(guān)閉 執(zhí)行transfer方法 當(dāng)transfer方法成功執(zhí)行,Tx_A提交,Session_A關(guān)閉,19,當(dāng)transfer發(fā)生異常,執(zhí)行AccountService代理的transfer方法 檢查此代理定義的所有攔截器(有事務(wù)攔截器,和一個Advice) 根據(jù)transfer方法事務(wù)的傳播規(guī)則(REQUIRED),開啟一個新的事務(wù)Tx_A,打開Session_A 因為Advice實現(xiàn)了MethodBeforeAdvice接口,因此首先執(zhí)行Advice中的before方法 Before方法中,使用了LogService代理的log方法 檢查LogService代理定義的攔截器(有事務(wù)攔截器) 根據(jù)log方法的傳播規(guī)則(REQUIRES_NEW),又開啟一個新的事務(wù)Tx_B,打開Session_B 執(zhí)行l(wèi)og方法 當(dāng)log方法成功執(zhí)行,Tx_B提交,Session_B關(guān)閉 執(zhí)行transfer方法 當(dāng)transfer方法拋出異常,執(zhí)行Advice 的afterThrowing 方法 Tx_A回滾,Session_A關(guān)閉,20,流程分析,當(dāng)事務(wù)攔截器中的設(shè)置如下時,21,PROPAGATION_REQUIRED PROPAGATION_REQUIRED,執(zhí)行順序,執(zhí)行AccountService代理的transfer方法 檢查此代理定義的所有攔截器(有事務(wù)攔截器,和一個Advice) 根據(jù)transfer方法事務(wù)的傳播規(guī)則(REQUIRED),開啟一個新的事務(wù)Tx_A,打開Session_A 因為Advice實現(xiàn)了MethodBeforeAdvice接口,因此首先執(zhí)行Advice中的before方法 Before方法中,使用了LogService代理的log方法 檢查LogService代理定義的攔截器(有事務(wù)攔截器) 根據(jù)log方法的傳播規(guī)則( REQUIRED ),加入當(dāng)前的事務(wù)Tx_A 執(zhí)行l(wèi)og方法 執(zhí)行transfer方法 當(dāng)transfer方法成功執(zhí)行,Tx_A提交,Session_A關(guān)閉,22,當(dāng)transfer發(fā)生異常,執(zhí)行AccountService代理的transfer方法 檢查此代理定義的所有攔截器(有事務(wù)攔截器,和一個Advice) 根據(jù)transfer方法事務(wù)的傳播規(guī)則(REQUIRED),開啟一個新的事務(wù)Tx_A,打開Session_A 因為Advice實現(xiàn)了MethodBeforeAdvice接口,因此首先執(zhí)行Advice中的before方法 Before方法中,使用了LogService代理的log
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘭州社區(qū)團購合同范本
- 再生資源回收收購合同范本
- 化工儲罐出租合同范本
- 加盟藝術(shù)培訓(xùn)合同范本
- 債權(quán)置換合同范本
- 農(nóng)土租賃合同范本
- 加工店轉(zhuǎn)讓合同范本
- 中介拿鑰匙裝修合同范本
- 勞務(wù)包活合同范本
- 勞務(wù)派遣辭退合同范本
- 2025年黑龍江農(nóng)墾職業(yè)學(xué)院單招職業(yè)傾向性測試題庫附答案
- 小學(xué)科學(xué)點亮我的小燈泡省公開課一等獎全國示范課微課金獎?wù)n件
- 2023-2024學(xué)年高中信息技術(shù)必修一滬科版(2019)第三單元項目六《 解決溫標轉(zhuǎn)換問題-認識程序和程序設(shè)計語言》教學(xué)設(shè)計
- 【湘教版】2024-2025學(xué)年七年級數(shù)學(xué)下冊教學(xué)工作計劃(及進度表)
- 《急性左心衰》課件
- 新生兒胃腸減壓護理
- 二零二五版洗煤廠與礦業(yè)公司合作洗煤業(yè)務(wù)合同3篇
- 2024預(yù)防流感課件完整版
- 病例報告表(CRF)模板
- DL∕T 2447-2021 水電站防水淹廠房安全檢查技術(shù)規(guī)程
- 煤礦績效考核管理辦法
評論
0/150
提交評論