


版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、P 編程Sprin課程目標(biāo)設(shè)計(jì)模式 Spring 的環(huán)境搭建 SpringIOC 與 AOPSpring 事物與行為一、模式1.1 概述(Proxy)是一種設(shè)計(jì)模式, 提供了對(duì)目標(biāo)對(duì)象另外的方式;即通過(guò)目標(biāo)對(duì)象。 這樣好處: 可以在目標(biāo)對(duì)象實(shí)現(xiàn)的基礎(chǔ)上,增強(qiáng)額外的功能操作。(擴(kuò)展目標(biāo)對(duì)象的功能)。舉例:(目標(biāo))-經(jīng)紀(jì)人用戶(hù)()模式的關(guān)鍵點(diǎn):對(duì)象與目標(biāo)對(duì)象。1.2 靜態(tài)靜態(tài)1)2),對(duì)象,要實(shí)現(xiàn)與目標(biāo)對(duì)象一樣的接口;舉例:保存用戶(hù)(模擬),直接保存Proxy, 給保存方法添加事務(wù)處理總結(jié)靜態(tài):可以做到在不修改目標(biāo)對(duì)象的功能前提下,對(duì)目標(biāo)對(duì)象功能擴(kuò)展。缺點(diǎn):- 因?yàn)閷?duì)象,需要與目標(biāo)對(duì)象實(shí)現(xiàn)一樣的接
2、口。所以會(huì)有很多類(lèi),類(lèi)太多。-一旦接口增加方法,目標(biāo)對(duì)象與對(duì)象都要。解決:工廠(chǎng)?可以使用動(dòng)態(tài)。1.3 動(dòng)態(tài)動(dòng)態(tài)1)2),對(duì)象,不需要實(shí)現(xiàn)接口;對(duì)象的生成,是利用 JDKAPI, 動(dòng)態(tài)的在內(nèi)存中構(gòu)建對(duì)象(需要指定創(chuàng)建對(duì)象/目標(biāo)對(duì)象 實(shí)現(xiàn)的接口的類(lèi)型;);3)動(dòng)態(tài), JDK, 接口;JDK 中生成|- Proxy對(duì)象的 API:sic Object newProxyInstance(ClassLoader loader,指定當(dāng)前目標(biāo)對(duì)象使用類(lèi)加載器目標(biāo)對(duì)象實(shí)現(xiàn)的接口的類(lèi)型事件處理器Classerfa,InvocationHandler h)動(dòng)態(tài)總結(jié):對(duì)象不需要實(shí)現(xiàn)接口,但是目標(biāo)對(duì)象一定要實(shí)現(xiàn)接口;
3、否則不能用動(dòng)態(tài)!(class$Proxy0implements Iuser)思考:有一個(gè)目標(biāo)對(duì)象,想要功能擴(kuò)展,但目標(biāo)對(duì)象沒(méi)有實(shí)現(xiàn)接口,怎樣功能擴(kuò)展?ClassUser/ 子類(lèi)的方式ClasbclassextendsUser以子類(lèi)的方式實(shí)現(xiàn)(cglib)1.4 Cglib,也叫做子類(lèi)。在內(nèi)存中構(gòu)建一個(gè)子類(lèi)對(duì)象從而實(shí)現(xiàn)對(duì)目標(biāo)對(duì)象功能的擴(kuò)展。CglibJDK 的動(dòng)態(tài)如果想有一個(gè)限制,就是使用動(dòng)態(tài)的對(duì)象必須實(shí)現(xiàn)一個(gè)或多個(gè)接口。沒(méi)有實(shí)現(xiàn)接口的類(lèi),就可以使用 CGLIB 實(shí)現(xiàn)。CGLIB 是一個(gè)強(qiáng)大的高性能的代碼生成包,它可以在運(yùn)行期擴(kuò)展Java 類(lèi)與實(shí)現(xiàn)Java接口。它廣泛的被許多 AOP 的框架使用
4、,例如 Spring AOP 和 dynaop,為他們提供方法的erception()。CGLIB 包的底層是通過(guò)使用一個(gè)小而快的字節(jié)碼處理框架 ASM,來(lái)轉(zhuǎn)換字節(jié)碼并生成新的類(lèi)。不鼓勵(lì)直接使用 ASM,因?yàn)樗竽惚仨殞?duì) JVM件的格式和指令集都很熟悉。結(jié)構(gòu)包括 class 文Cglib 子類(lèi):1) 需要引入cglib jar 文件, 但是 spring 的引入 spring-core-3.2.5.jar 即可。包中已經(jīng)包括了 cglib 功能,所以直接引入功能包后,就可以在內(nèi)存中動(dòng)態(tài)構(gòu)建子類(lèi)的類(lèi)不能為 final, 否則報(bào)錯(cuò)。目標(biāo)對(duì)象的方法如果為 final/sic, 那么就不會(huì)被的業(yè)務(wù)方
5、法。,即不會(huì)執(zhí)行目標(biāo)對(duì)象額外在 Spring 的 AOP 編程中,如果加入容器的目標(biāo)對(duì)象有實(shí)現(xiàn)接口,用 JDK;如果目標(biāo)對(duì)象沒(méi)有實(shí)現(xiàn)接口,用 Cglib;二、手動(dòng)實(shí)現(xiàn) AOP 編程AOP 面向切面的編程,AOP 可以實(shí)現(xiàn)“業(yè)務(wù)代碼”與“關(guān)注點(diǎn)代碼”分離分析總結(jié):關(guān)注點(diǎn)代碼,就是指重復(fù)執(zhí)行的代碼。業(yè)務(wù)代碼與關(guān)注點(diǎn)代碼分離,好處?- 關(guān)注點(diǎn)代碼寫(xiě)一次即可;-開(kāi)發(fā)者只需要關(guān)注業(yè)務(wù);-運(yùn)行時(shí)期,執(zhí)行業(yè)務(wù)代碼時(shí)候動(dòng)態(tài)植入關(guān)注點(diǎn)代碼; 【】如何分離?過(guò)程式/對(duì)象式/模式分離/ 保存一個(gè)用戶(hù)public void add(User user) Sesses= null; Tran ion trans = n
6、ull; try ses= HibernateSesFactoryUtils.getSes();/ 【關(guān)注點(diǎn)代碼】trans = ses.begranion();/ 【關(guān)注點(diǎn)代碼】ses.save(user);/業(yè)務(wù)代碼mit();/【關(guān)注點(diǎn)代碼】 catch (Exception e) e.prStackTrace(); if(trans != null)trans.rollback();/.【關(guān)注點(diǎn)代碼】 finallyHibernateSesFactoryUtils.closeSes(ses);/.【關(guān)注點(diǎn)代碼】三、AOP 編程3.1 概述:Aop, aspect object prog
7、ramming面向切面編程功能: 讓關(guān)注點(diǎn)代碼與業(yè)務(wù)代碼分離!關(guān)注點(diǎn),重復(fù)代碼就叫做關(guān)注點(diǎn);切面,關(guān)注點(diǎn)形成的類(lèi),就叫切面(類(lèi))!面向切面編程,就是指 對(duì)很多功能都有的重復(fù)的代碼抽取,再在運(yùn)行的時(shí)候網(wǎng)業(yè)務(wù)方法上動(dòng)態(tài)植入“切面類(lèi)代碼”。切入點(diǎn),執(zhí)行目標(biāo)對(duì)象方法,動(dòng)態(tài)植入切面代碼。可以通過(guò)切入點(diǎn)表達(dá)式,指定切面類(lèi)代碼。哪些類(lèi)的哪些方法; 給指定的類(lèi)在運(yùn)行的時(shí)候植入3.2 注解方式實(shí)現(xiàn) AOP 編程步驟:1) 先引入 aop 相關(guān) jar 文件(aspectjaop 優(yōu)秀組件)【spring3.2 源碼】【spring2.5 源碼/lib/aopalliance】【spring2.5 源碼/lib/
8、aspectj】或【aspectj-1.8.2lib】【spring2.5 源碼/lib/aspectj】或【aspectj-1.8.2lib】sprinp-3.2.5.RELEASE.jaraopalliance.jaraspectjweaver.jar aspectjrt.jar注意: 用到 spring2.5 版本的 jar 文件,如果用 jdk1.7 可能會(huì)有問(wèn)題。需要升級(jí) aspectj 組件,即使用 aspectj-1.8.2 版本中提供 jar 文件提供。2) bean.xml 中引入 aop 名稱(chēng)空間3) 開(kāi)啟 aop 注解4) 使用注解Aspect指定一個(gè)類(lèi)為切面類(lèi)Pocut
9、(execution(* com.itmayiedu.service.UserService.add(.)指定切入點(diǎn)表達(dá)式前置通知: 目標(biāo)方法之前執(zhí)行Before(poCut_()后置通知:目標(biāo)方法之后執(zhí)行(始終執(zhí)行)返回后通知: 執(zhí)行方法結(jié)束前執(zhí)行(異常不執(zhí)行)異常通知:出現(xiàn)異常時(shí)候執(zhí)行After(poCut_()AfterReturning(poCut_() AfterThrowing(poCut_()環(huán)繞通知:環(huán)繞目標(biāo)方法執(zhí)行Around(poCut_()3.3 XML 方式實(shí)現(xiàn) AOP 編程Xml 實(shí)現(xiàn) aop 編程:Component Aspectpublic class Aop B
10、efore(execution(* com.itmayiedu.service.UserService.add(.) public void begin() System.out.prln(前置通知);After(execution(* com.itmayiedu.service.UserService.add(.) public void commit() System.out.prln(后置通知);AfterReturning(execution(* com.itmayiedu.service.UserService.add(.) public void afterReturning()
11、System.out.prln(運(yùn)行通知);AfterThrowing(execution(* com.itmayiedu.service.UserService.add(.) public void afterThrowing() System.out.prln(異常通知);Around(execution(* com.itmayiedu.service.UserService.add(.)public void around(ProceedingJoinPoproceedingJoinPo) throws Throwable System.out.prln(我是環(huán)繞通知-前);proceedingJoinPceed(); System.out.prln(我是環(huán)繞通知-后);引入 jar
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 介入影像學(xué)新進(jìn)展-深度研究
- 記憶與集體記憶建構(gòu)-深度研究
- 空氣凈化材料創(chuàng)新應(yīng)用-深度研究
- 公路項(xiàng)目人員聘請(qǐng)合同范本
- 農(nóng)村房屋安裝維修合同范本
- 公司員工勞動(dòng)合同范本
- 北京企業(yè)住房合同范本
- 產(chǎn)品交付標(biāo)準(zhǔn)合同范本
- 公司擔(dān)保合同范本6
- 綜合實(shí)踐項(xiàng)目《制作細(xì)胞模型》教學(xué)設(shè)計(jì)-2024-2025學(xué)年魯科版生物六年級(jí)上冊(cè)
- 24年追覓在線(xiàn)測(cè)評(píng)28題及答案
- 智能建造施工技術(shù) 課件 項(xiàng)目1 智能建造施工概論;項(xiàng)目2 土方工程;項(xiàng)目3 基礎(chǔ)工程
- 醫(yī)學(xué)教材 超聲引導(dǎo)下乳腺真空微創(chuàng)旋切(VABB)
- 2024年鐵路線(xiàn)路工(高級(jí)技師)技能鑒定理論考試題庫(kù)(含答案)
- 2025高考物理步步高同步練習(xí)選修1練透答案精析
- 汽車(chē)修理工勞動(dòng)合同三篇
- 職業(yè)本科《大學(xué)英語(yǔ)》課程標(biāo)準(zhǔn)
- 修建水壩施工合同模板
- 北師大版三年級(jí)下冊(cè)除法豎式計(jì)算題練習(xí)100道及答案
- 房屋租給賣(mài)煙花的合同
- 十堰2024年湖北十堰市茅箭區(qū)教育局所屬學(xué)校招聘教師134人筆試歷年典型考題及考點(diǎn)附答案解析
評(píng)論
0/150
提交評(píng)論