




已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第 四 章,Spring AOP 的應(yīng)用,回顧,AOP的目的即在正常的業(yè)務(wù)操作之外增加的附加操作 通過(guò)切入點(diǎn)(pointcut)指名進(jìn)行哪些切面(aspect)操作 ProxyFactoryBean interceptorNames targetName proxyInterfaces 攔截器(Interceptor),通知(Advice),和切面的不同(Aspect),2,AOP的應(yīng)用,事務(wù)切面 日志切面 其它附加操作切面,3,事務(wù)切面,在介紹事務(wù)切面之前,回顧網(wǎng)上銀行的項(xiàng)目,并使用Spring IOC注入業(yè)務(wù)實(shí)現(xiàn)類所需的sessionFactory 實(shí)現(xiàn)步驟和問(wèn)題思考: 實(shí)現(xiàn)業(yè)務(wù)接口和業(yè)務(wù)實(shí)現(xiàn)類(AccountService、LogService) sessionFactory如何注入的,應(yīng)該注入給誰(shuí)? 事務(wù)由誰(shuí)來(lái)管理?,4,優(yōu)化,現(xiàn)在項(xiàng)目經(jīng)理提出需求,希望改進(jìn)代碼的結(jié)構(gòu),達(dá)到如下目標(biāo): transfer方法(或其它業(yè)務(wù)方法)在執(zhí)行時(shí),事務(wù)自動(dòng)開(kāi)始 在正確完成后,事務(wù)提交,并且關(guān)閉hibernate session 在出現(xiàn)RuntimeException(或其子類)異常時(shí),事務(wù)回滾,并關(guān)閉hibernate session 其他異常,仍執(zhí)行提交關(guān)閉的操作,5,Spring的解決方案,方案A:使用事務(wù)攔截器并代理業(yè)務(wù)實(shí)現(xiàn)類 方案B:使用事務(wù)advice 和aspect 切面來(lái)實(shí)現(xiàn)事務(wù)攔截,6,方案A,第一步,改寫(xiě)AccountService業(yè)務(wù)實(shí)現(xiàn)類 第二步,定義ProxyFactoryBean以返回AccountService代理對(duì)象 proxyInterfaces targetName interceptorNames 這里添加事務(wù)攔截器,7,事務(wù)攔截器,第三步定義事務(wù)攔截器,8, PROPAGATION_REQUIRED PROPAGATION_REQUIRES_NEW ,事務(wù)屬性以及 事務(wù)管理器,Show Time,修改perties,以便觀察Spring執(zhí)行過(guò)程 .springframework.aop=debug .springframework.transaction=debug .springframework.orm.hibernate3=debug,9,事務(wù)管理器,Spring由于需要為多種數(shù)據(jù)層的實(shí)現(xiàn)提供集成支持,針對(duì)不同的情況,定義了各種事務(wù)管理器,一定要選擇正確的事務(wù)管理器 比如: DataSourceTransactionManager 對(duì)應(yīng)JDBC事務(wù) HibernateTransactionManager 對(duì)應(yīng)Hibernate提供的事務(wù) JtaTransactionManager 對(duì)應(yīng)JTA事務(wù) 大多數(shù)事務(wù)管理器都需要設(shè)置dataSource(數(shù)據(jù)源)屬性,對(duì)于HibernateTransactionManager可以只設(shè)置sessionFactory屬性,10,事務(wù)屬性,常見(jiàn)的事務(wù)屬性有: 事務(wù)的傳播行為 事務(wù)的隔離級(jí)別 事務(wù)是否只讀 針對(duì)只讀事務(wù),Spring在某些情況下會(huì)提供優(yōu)化,11,事務(wù)的傳播行為,以下的定義可以在TransactionDefinition中找到 PROPAGATION_REQUIRED PROPAGATION_SUPPORTS PROPAGATION_MANDATORY PROPAGATION_REQUIRES_NEW PROPAGATION_NOT_SUPPORTED PROPAGATION_NEVER,12,事務(wù)的傳播行為,PROPAGATION_REQUIRED表示如果沒(méi)有事務(wù),則開(kāi)始新的事務(wù),事務(wù)已經(jīng)存在,則加入當(dāng)前事務(wù) PROPAGATION_SUPPORTS 表示如果事務(wù)已經(jīng)存在,則加入當(dāng)前事務(wù),如果沒(méi)有事務(wù),不會(huì)開(kāi)始新事務(wù) PROPAGATION_MANDATORY 表示必須有事務(wù)存在,并加入當(dāng)前事務(wù),否則拋出異常 PROPAGATION_REQUIRES_NEW 表示每次都開(kāi)始一個(gè)全新事務(wù) PROPAGATION_NOT_SUPPORTED 表示不會(huì)開(kāi)始或加入事務(wù) PROPAGATION_NEVER 表示不會(huì)開(kāi)始或加入事務(wù),如果事務(wù)已存在,拋出異常,13,事務(wù)的隔離級(jí)別,以下的定義可以在TransactionDefinition中找到 ISOLATION_READ_UNCOMMITTED ISOLATION_READ_COMMITTED ISOLATION_REPEATABLE_READ ISOLATION_SERIALIZABLE,14,事務(wù)的隔離級(jí)別,首先明確隔離級(jí)別指的都是同一個(gè)事務(wù)中 ISOLATION_READ_UNCOMMITTED表示會(huì)讀取到未提交的數(shù)據(jù) ISOLATION_READ_COMMITTED表示讀取到的是已經(jīng)提交的數(shù)據(jù) ISOLATION_REPEATABLE_READ表示多次讀取的數(shù)據(jù)是相同的 ISOLATION_SERIALIZABLE表示就好像沒(méi)有別的用戶在修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)一樣,15,如何使用隔離級(jí)別,對(duì)于大多數(shù)數(shù)據(jù)庫(kù)來(lái)說(shuō),事務(wù)的隔離級(jí)別是ISOLATION_READ_COMMITTED,我們不需要做更多的設(shè)置,就可以很好的工作了 將事務(wù)的隔離級(jí)別設(shè)置為ISOLATION_REPEATABLE_READ可以防止丟失更新,但這樣做會(huì)嚴(yán)重影響系統(tǒng)的并發(fā)性,因此更多地是采用樂(lè)觀鎖的形式 ISOLATION_SERIALIZABLE并非你想象中的鎖定一切!,16,繼續(xù)完成需求,第四步,完成LogService業(yè)務(wù)實(shí)現(xiàn)類及其代理對(duì)象的定義,修改事務(wù)攔截器 第五步,定義一個(gè)Advice實(shí)現(xiàn)ThrowsAdvice和MethodBeforeAdvice 以便處理日志和其它附加邏輯 第六步,將此Advice 添加至合適的位置,17,流程分析,當(dāng)事務(wù)攔截器中的設(shè)置如下時(shí),18,PROPAGATION_REQUIRED PROPAGATION_REQUIRES_NEW,執(zhí)行順序,執(zhí)行AccountService代理的transfer方法 檢查此代理定義的所有攔截器(有事務(wù)攔截器,和一個(gè)Advice) 根據(jù)transfer方法事務(wù)的傳播規(guī)則(REQUIRED),開(kāi)啟一個(gè)新的事務(wù)Tx_A,打開(kāi)Session_A 因?yàn)锳dvice實(shí)現(xiàn)了MethodBeforeAdvice接口,因此首先執(zhí)行Advice中的before方法 Before方法中,使用了LogService代理的log方法 檢查L(zhǎng)ogService代理定義的攔截器(有事務(wù)攔截器) 根據(jù)log方法的傳播規(guī)則(REQUIRES_NEW),又開(kāi)啟一個(gè)新的事務(wù)Tx_B,打開(kāi)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ù)攔截器,和一個(gè)Advice) 根據(jù)transfer方法事務(wù)的傳播規(guī)則(REQUIRED),開(kāi)啟一個(gè)新的事務(wù)Tx_A,打開(kāi)Session_A 因?yàn)锳dvice實(shí)現(xiàn)了MethodBeforeAdvice接口,因此首先執(zhí)行Advice中的before方法 Before方法中,使用了LogService代理的log方法 檢查L(zhǎng)ogService代理定義的攔截器(有事務(wù)攔截器) 根據(jù)log方法的傳播規(guī)則(REQUIRES_NEW),又開(kāi)啟一個(gè)新的事務(wù)Tx_B,打開(kāi)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è)置如下時(shí),21,PROPAGATION_REQUIRED PROPAGATION_REQUIRED,執(zhí)行順序,執(zhí)行AccountService代理的transfer方法 檢查此代理定義的所有攔截器(有事務(wù)攔截器,和一個(gè)Advice) 根據(jù)transfer方法事務(wù)的傳播規(guī)則(REQUIRED),開(kāi)啟一個(gè)新的事務(wù)Tx_A,打開(kāi)Session_A 因?yàn)锳dvice實(shí)現(xiàn)了MethodBeforeAdvice接口,因此首先執(zhí)行Advice中的before方法 Before方法中,使用了LogService代理的log方法 檢查L(zhǎng)ogService代理定義的攔截器(有事務(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ù)攔截器,和一個(gè)Advice) 根據(jù)transfer方法事務(wù)的傳播規(guī)則(REQUIRED),開(kāi)啟一個(gè)新的事務(wù)Tx_A,打開(kāi)Session_A 因?yàn)锳dvice實(shí)現(xiàn)了MethodBeforeAdvice接口,因此首先執(zhí)行Advice中的before方法 Before方法中,使用了LogService代理的log
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司數(shù)字化活動(dòng)方案
- 公司羽毛球團(tuán)建活動(dòng)方案
- 公司秋季出游活動(dòng)方案
- 公司粽子節(jié)活動(dòng)方案
- 公司新人見(jiàn)面會(huì)策劃方案
- 公司畢業(yè)晚會(huì)活動(dòng)方案
- 公司聚會(huì)團(tuán)建策劃方案
- 公司比學(xué)趕幫超活動(dòng)方案
- 公司端午慰問(wèn)活動(dòng)方案
- 公司消除浪費(fèi)活動(dòng)方案
- 體外診斷試劑盒線性范圍研究線性區(qū)間評(píng)價(jià)資料及可報(bào)告區(qū)間建立
- AQ 1097-2014 井工煤礦安全設(shè)施設(shè)計(jì)編制導(dǎo)則(正式版)
- 甲乙方施工合同范本
- 嬰幼兒配方乳粉市場(chǎng)銷售管理規(guī)范
- 小班語(yǔ)言《誰(shuí)的救生圈》課件
- 海思芯片PC-測(cè)試技術(shù)規(guī)范
- 內(nèi)陸?zhàn)B殖與水生植物種植
- 集體協(xié)商培訓(xùn)課件
- Unit 3 What would you like A Let's learn(教學(xué)設(shè)計(jì))人教PEP版英語(yǔ)五年級(jí)上冊(cè)
- 物業(yè)社區(qū)團(tuán)購(gòu)方案
- 仙家送錢表文-文字打印版
評(píng)論
0/150
提交評(píng)論