![北大青鳥spring入門課程TP4.ppt_第1頁](http://file.renrendoc.com/FileRoot1/2019-2/1/190b64f6-457f-4e37-bd7e-f4b0a7cdecab/190b64f6-457f-4e37-bd7e-f4b0a7cdecab1.gif)
![北大青鳥spring入門課程TP4.ppt_第2頁](http://file.renrendoc.com/FileRoot1/2019-2/1/190b64f6-457f-4e37-bd7e-f4b0a7cdecab/190b64f6-457f-4e37-bd7e-f4b0a7cdecab2.gif)
![北大青鳥spring入門課程TP4.ppt_第3頁](http://file.renrendoc.com/FileRoot1/2019-2/1/190b64f6-457f-4e37-bd7e-f4b0a7cdecab/190b64f6-457f-4e37-bd7e-f4b0a7cdecab3.gif)
![北大青鳥spring入門課程TP4.ppt_第4頁](http://file.renrendoc.com/FileRoot1/2019-2/1/190b64f6-457f-4e37-bd7e-f4b0a7cdecab/190b64f6-457f-4e37-bd7e-f4b0a7cdecab4.gif)
![北大青鳥spring入門課程TP4.ppt_第5頁](http://file.renrendoc.com/FileRoot1/2019-2/1/190b64f6-457f-4e37-bd7e-f4b0a7cdecab/190b64f6-457f-4e37-bd7e-f4b0a7cdecab5.gif)
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第 四 章,Spring AOP 的應用,回顧,AOP的目的即在正常的業(yè)務操作之外增加的附加操作 通過切入點(pointcut)指名進行哪些切面(aspect)操作 ProxyFactoryBean interceptorNames targetName proxyInterfaces 攔截器(Interceptor),通知(Advice),和切面的不同(Aspect),2,AOP的應用,事務切面 日志切面 其它附加操作切面,3,事務切面,在介紹事務切面之前,回顧網上銀行的項目,并使用Spring IOC注入業(yè)務實現類所需的sessionFactory 實現步驟和問題思考: 實現業(yè)務接口和業(yè)務實現類(AccountService、LogService) sessionFactory如何注入的,應該注入給誰? 事務由誰來管理?,4,優(yōu)化,現在項目經理提出需求,希望改進代碼的結構,達到如下目標: transfer方法(或其它業(yè)務方法)在執(zhí)行時,事務自動開始 在正確完成后,事務提交,并且關閉hibernate session 在出現RuntimeException(或其子類)異常時,事務回滾,并關閉hibernate session 其他異常,仍執(zhí)行提交關閉的操作,5,Spring的解決方案,方案A:使用事務攔截器并代理業(yè)務實現類 方案B:使用事務advice 和aspect 切面來實現事務攔截,6,方案A,第一步,改寫AccountService業(yè)務實現類 第二步,定義ProxyFactoryBean以返回AccountService代理對象 proxyInterfaces targetName interceptorNames 這里添加事務攔截器,7,事務攔截器,第三步定義事務攔截器,8, PROPAGATION_REQUIRED PROPAGATION_REQUIRES_NEW ,事務屬性以及 事務管理器,Show Time,修改perties,以便觀察Spring執(zhí)行過程 .springframework.aop=debug .springframework.transaction=debug .springframework.orm.hibernate3=debug,9,事務管理器,Spring由于需要為多種數據層的實現提供集成支持,針對不同的情況,定義了各種事務管理器,一定要選擇正確的事務管理器 比如: DataSourceTransactionManager 對應JDBC事務 HibernateTransactionManager 對應Hibernate提供的事務 JtaTransactionManager 對應JTA事務 大多數事務管理器都需要設置dataSource(數據源)屬性,對于HibernateTransactionManager可以只設置sessionFactory屬性,10,事務屬性,常見的事務屬性有: 事務的傳播行為 事務的隔離級別 事務是否只讀 針對只讀事務,Spring在某些情況下會提供優(yōu)化,11,事務的傳播行為,以下的定義可以在TransactionDefinition中找到 PROPAGATION_REQUIRED PROPAGATION_SUPPORTS PROPAGATION_MANDATORY PROPAGATION_REQUIRES_NEW PROPAGATION_NOT_SUPPORTED PROPAGATION_NEVER,12,事務的傳播行為,PROPAGATION_REQUIRED表示如果沒有事務,則開始新的事務,事務已經存在,則加入當前事務 PROPAGATION_SUPPORTS 表示如果事務已經存在,則加入當前事務,如果沒有事務,不會開始新事務 PROPAGATION_MANDATORY 表示必須有事務存在,并加入當前事務,否則拋出異常 PROPAGATION_REQUIRES_NEW 表示每次都開始一個全新事務 PROPAGATION_NOT_SUPPORTED 表示不會開始或加入事務 PROPAGATION_NEVER 表示不會開始或加入事務,如果事務已存在,拋出異常,13,事務的隔離級別,以下的定義可以在TransactionDefinition中找到 ISOLATION_READ_UNCOMMITTED ISOLATION_READ_COMMITTED ISOLATION_REPEATABLE_READ ISOLATION_SERIALIZABLE,14,事務的隔離級別,首先明確隔離級別指的都是同一個事務中 ISOLATION_READ_UNCOMMITTED表示會讀取到未提交的數據 ISOLATION_READ_COMMITTED表示讀取到的是已經提交的數據 ISOLATION_REPEATABLE_READ表示多次讀取的數據是相同的 ISOLATION_SERIALIZABLE表示就好像沒有別的用戶在修改數據庫中的數據一樣,15,如何使用隔離級別,對于大多數數據庫來說,事務的隔離級別是ISOLATION_READ_COMMITTED,我們不需要做更多的設置,就可以很好的工作了 將事務的隔離級別設置為ISOLATION_REPEATABLE_READ可以防止丟失更新,但這樣做會嚴重影響系統(tǒng)的并發(fā)性,因此更多地是采用樂觀鎖的形式 ISOLATION_SERIALIZABLE并非你想象中的鎖定一切!,16,繼續(xù)完成需求,第四步,完成LogService業(yè)務實現類及其代理對象的定義,修改事務攔截器 第五步,定義一個Advice實現ThrowsAdvice和MethodBeforeAdvice 以便處理日志和其它附加邏輯 第六步,將此Advice 添加至合適的位置,17,流程分析,當事務攔截器中的設置如下時,18,PROPAGATION_REQUIRED PROPAGATION_REQUIRES_NEW,執(zhí)行順序,執(zhí)行AccountService代理的transfer方法 檢查此代理定義的所有攔截器(有事務攔截器,和一個Advice) 根據transfer方法事務的傳播規(guī)則(REQUIRED),開啟一個新的事務Tx_A,打開Session_A 因為Advice實現了MethodBeforeAdvice接口,因此首先執(zhí)行Advice中的before方法 Before方法中,使用了LogService代理的log方法 檢查LogService代理定義的攔截器(有事務攔截器) 根據log方法的傳播規(guī)則(REQUIRES_NEW),又開啟一個新的事務Tx_B,打開Session_B 執(zhí)行l(wèi)og方法 當log方法成功執(zhí)行,Tx_B提交,Session_B關閉 執(zhí)行transfer方法 當transfer方法成功執(zhí)行,Tx_A提交,Session_A關閉,19,當transfer發(fā)生異常,執(zhí)行AccountService代理的transfer方法 檢查此代理定義的所有攔截器(有事務攔截器,和一個Advice) 根據transfer方法事務的傳播規(guī)則(REQUIRED),開啟一個新的事務Tx_A,打開Session_A 因為Advice實現了MethodBeforeAdvice接口,因此首先執(zhí)行Advice中的before方法 Before方法中,使用了LogService代理的log方法 檢查LogService代理定義的攔截器(有事務攔截器) 根據log方法的傳播規(guī)則(REQUIRES_NEW),又開啟一個新的事務Tx_B,打開Session_B 執(zhí)行l(wèi)og方法 當log方法成功執(zhí)行,Tx_B提交,Session_B關閉 執(zhí)行transfer方法 當transfer方法拋出異常,執(zhí)行Advice 的afterThrowing 方法 Tx_A回滾,Session_A關閉,20,流程分析,當事務攔截器中的設置如下時,21,PROPAGATION_REQUIRED PROPAGATION_REQUIRED,執(zhí)行順序,執(zhí)行AccountService代理的transfer方法 檢查此代理定義的所有攔截器(有事務攔截器,和一個Advice) 根據transfer方法事務的傳播規(guī)則(REQUIRED),開啟一個新的事務Tx_A,打開Session_A 因為Advice實現了MethodBeforeAdvice接口,因此首先執(zhí)行Advice中的before方法 Before方法中,使用了LogService代理的log方法 檢查LogService代理定義的攔截器(有事務攔截器) 根據log方法的傳播規(guī)則( REQUIRED ),加入當前的事務Tx_A 執(zhí)行l(wèi)og方法 執(zhí)行transfer方法 當transfer方法成功執(zhí)行,Tx_A提交,Session_A關閉,22,當transfer發(fā)生異常,執(zhí)行AccountService代理的transfer方法 檢查此代理定義的所有攔截器(有事務攔截器,和一個Advice) 根據transfer方法事務的傳播規(guī)則(REQUIRED),開啟一個新的事務Tx_A,打開Session_A 因為Advice實現了MethodBeforeAdvice接口,因此首先執(zhí)行Advice中的before方法 Before方法中,使用了LogService代理的log
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版數學八年級上冊15.4.1《提公因式法因式分解》聽評課記錄
- 人教版七年級地理上冊:4.2《世界的語言和宗教》聽課評課記錄1
- 八年級歷史上聽課評課記錄《第一單元第1課鴉片戰(zhàn)爭》聽課評課記錄
- 用維修基金維修電梯主機軸承合同
- 生態(tài)項目投資合作協(xié)議書(2篇)
- 人教版數學八年級上冊聽評課記錄15.2.1《分式的乘除》
- 部編版八年級道德與法治下冊第五課《我國基本制度》第3課時《基本政治制度》聽課評課記錄
- 北師大版數學一年級上冊第一單元《生活中的數 第3課時 玩具》聽評課記錄
- 北師大版數學五年級上冊《軸對稱再認識(一)》聽評課記錄2
- 冀教版數學七年級下冊《數學活動 拼圖與分解因式》聽評課記錄
- 初中數學教學“教-學-評”一體化研究
- 2012年安徽高考理綜試卷及答案-文檔
- 《游戲界面設計專題實踐》課件-知識點5:圖標繪制準備與繪制步驟
- 自動扶梯安裝過程記錄
- MOOC 材料科學基礎-西安交通大學 中國大學慕課答案
- 智慧供熱管理系統(tǒng)方案可行性研究報告
- 帕金森病的言語康復治療
- 中國城市居民的健康意識和生活方式調研分析報告
- 上海星巴克員工手冊
- 貓狗創(chuàng)業(yè)計劃書
- 復產復工試題含答案
評論
0/150
提交評論