




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
主講人:閭楓延遲符基于XML配置的AspectJSpringAOPAspectJ概述延遲符
AspectJ作為一個(gè)AOP框架,主要功能包括在不修改源代碼的情況下,通過(guò)在現(xiàn)有代碼中切入切面來(lái)實(shí)現(xiàn)對(duì)程序的增強(qiáng)和擴(kuò)展,包括日志記錄、性能監(jiān)控、事務(wù)管理以及異常處理等,這些切面通常與業(yè)務(wù)邏輯相分離,使得代碼結(jié)構(gòu)更加清晰、可維護(hù)和可擴(kuò)展。使用AspectJ實(shí)現(xiàn)AOP有兩種方式:一種是基于XML配置的AspectJ,另一種是基于注解的AspectJ。概述AspectJ概述延遲符AspectJ切入點(diǎn)用于定義在何處插入切面切入點(diǎn)(Pointcut)切面則定義了在切點(diǎn)處執(zhí)行的增強(qiáng)邏輯。切面(Aspect)通知類(lèi)型同樣包括前置通知、后置通知、返回通知、異常通知和環(huán)繞通知。通知(Advice)基于XML配置的AspectJ延遲符基于XML配置的AspectJ指在XML配置文件中,對(duì)切入點(diǎn)、切面、通知等進(jìn)行配置,配置的根元素是<aop:config>,其他相關(guān)配置是其子元素。
一個(gè)配置文件beans中可以包含多個(gè)<aop:config>元素,一個(gè)<aop:config>元素中可以包含多個(gè)子元素?;赬ML配置的AspectJ延遲符使用<aop:aspect>元素配置切面,可以把一個(gè)普通的Spring管理的Bean對(duì)象配置成切面,所以要在配置文件中先定義一個(gè)普通的SpringBean。定義切面的唯一標(biāo)識(shí)名稱(chēng)配置切面引用的Bean的id值
ref屬性id屬性基于XML配置的AspectJ延遲符
使用<aop:pointcut>配置切入點(diǎn),切入點(diǎn)描述了哪些方法會(huì)被通知所影響。<aop:pointcut>元素可以用于<aop:config>元素中,配置全局切入點(diǎn),被多個(gè)切面共享;也可以用于<aop:aspect>元素中,配置某一個(gè)切面的切入點(diǎn),只對(duì)當(dāng)前切面有效。定義切入點(diǎn)的唯一標(biāo)識(shí)名稱(chēng)配置關(guān)聯(lián)的切入點(diǎn)表達(dá)式expression屬性id屬性基于XML配置的AspectJ延遲符execution(modifiers-pattern?ret-type-patterndeclaring-type-pattern?name-pattern(param-pattern)throws-pattern?)表示目標(biāo)方法的訪問(wèn)修飾符,如public、privatemodifiers-pattern?表示需要被代理的目標(biāo)方法名,*代表所有,例如*DAOImpl,代表以DAOImpl結(jié)尾的所有方法;name-pattern表示目標(biāo)方法的返回值類(lèi)型ret-type-pattern表示目標(biāo)方法所在的類(lèi)的全路徑declaring-type-pattern?表示目標(biāo)方法的參數(shù)列表,(..)代表所有參數(shù),(*,String)代表第一個(gè)參數(shù)為任何值,第二個(gè)參數(shù)為String類(lèi)型;param-pattern表示目標(biāo)方法拋出的異常類(lèi)型throws-pattern?execution(*com.test.service.*.*(..))基于XML配置的AspectJ延遲符
<aop:advisor>元素用于直接配置通知,一般只能配置一個(gè)切入點(diǎn)和通知。<aop:advisor>中引用的通知時(shí),通知必須實(shí)現(xiàn)MethodInterceptor接口?;赬ML配置的AspectJ延遲符學(xué)習(xí)案例案例代碼在SpringAOP中使用基于XML配置文件的AspectJ?;赬ML配置的AspectJ-案例延遲符packagecom.test.dao;publicinterfaceIHello{publicvoidhello(Stringname);}packagecom.test.dao;publicclassHelloImplimplementsIHello{@Overridepublicvoidhello(Stringname){System.out.println("Hello"+name);}}業(yè)務(wù)類(lèi)基于XML配置的AspectJ-案例延遲符<!--AspectJ--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.20</version></dependency>1.添加依賴(lài)基于XML配置的AspectJ-案例延遲符//切面類(lèi)、通知類(lèi)publicclassXMLAdvice{//前置通知publicvoidbefore(JoinPointjoinPoint){System.out.print("前置通知,模擬權(quán)限管理");System.out.println(",目標(biāo)對(duì)象為:"+joinPoint.getTarget()+",被增強(qiáng)處理的方法:"+joinPoint.getSignature().getName());}//后置返回通知publicvoidafterReturning(JoinPointjoinPoint){System.out.print("后置返回通知:"+"模擬刪除臨時(shí)文件");System.out.println(",被增強(qiáng)處理的方法:"+joinPoint.getSignature().getName());}//環(huán)繞通知publicObjectaround(ProceedingJoinPointproceedingJoinPoint)throwsThrowable{//開(kāi)始System.out.println("環(huán)繞開(kāi)始:執(zhí)行目標(biāo)方法,模擬開(kāi)啟事務(wù)");//執(zhí)行當(dāng)前目標(biāo)方法Objectobject=proceedingJoinPceed();//結(jié)束System.out.println("環(huán)繞結(jié)束:執(zhí)行目標(biāo)方法后,模擬關(guān)閉事務(wù)");returnobject;}//異常通知publicvoidexcept(Throwablee){System.out.println("異常通知:"+"程序拋出異常了"+e.getMessage());}//后置通知,即最終通知publicvoidafter(){System.out.println("最終通知:模擬釋放資源");}}2.定義通知類(lèi)基于XML配置的AspectJ-案例延遲符<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-4.3.xsd /schema/aop /schema/aop/spring-aop-4.3.xsd"><!--聲明自動(dòng)代理聲明器--><aop:aspectj-autoproxy/><!--配置業(yè)務(wù)類(lèi)--><beanid="hello"class="com.test.dao.HelloImpl"></bean><!--配置切面類(lèi)--><beanid="advice1"class="com.test.aspects.XMLAdvice"></bean><!--aop配置--><aop:config><!--配置切面--><aop:aspectid="aspect1"ref="advice1"><!--配置切入點(diǎn)--><aop:pointcutid="pc1"expression="execution(*com.test.dao.*.*(..))"/><!--配置前置通知--><aop:beforemethod="before"pointcut-ref="pc1"></aop:before><!--配置后置通知--><aop:aftermethod="after"pointcut-ref="pc1"></aop:after><!--配置返回通知--><aop:after-returningmethod="afterReturning"pointcut-ref="pc1"></aop:after-returning><!--配置環(huán)繞通知--><aop:aroundmethod="around"pointcut-ref="pc1"></aop:around><!--配置異常通知,如果沒(méi)有異常拋出,通知不會(huì)切入--><aop:after-throwingmethod="except"pointcut-ref="pc1"throwing="e"></aop:after-throwing></aop:aspect></aop:config>3.添加配置基于XML配置的AspectJ-案例延遲符publicclassXMLAdviceTest{publicstaticvoidmain(String[]args){//讀取類(lèi)路徑下的配置文件ApplicationContextcontext=newClassPathXmlApplic
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 屋面光伏支架預(yù)埋施工方案
- 河南大型水景施工方案
- 邯鄲水泥板圍墻施工方案
- 安徽省天一大聯(lián)考2025屆高三3月調(diào)研考試歷史
- 山東一體化游泳池施工方案
- 塑膠樓地面施工方案
- 橋頭修復(fù)施工方案范本
- 道路鋼筋施工方案
- 森林培育技術(shù)發(fā)展應(yīng)用趨勢(shì)及管理措施的實(shí)踐分析
- 江蘇省泰州市興化市2024-2025學(xué)年九年級(jí)上學(xué)期期末化學(xué)試題(原卷版+解析版)
- 2022年上海高考語(yǔ)文樣卷及參考答案
- 國(guó)內(nèi)外鋼材牌號(hào)對(duì)照表
- 一年級(jí)下冊(cè)地方課程教案
- 有趣的仿生設(shè)計(jì)(課堂PPT)
- 第二章 航空飛行常見(jiàn)疾病
- 個(gè)體診所聘用醫(yī)師合同范本
- 航運(yùn)公司開(kāi)展安全管理體系有效性
- 牛羊定點(diǎn)屠宰廠項(xiàng)目可行性研究報(bào)告-甲乙丙資信
- 妊娠糖尿病-楊慧霞.ppt
- 上海機(jī)場(chǎng)控制區(qū)通行證申請(qǐng)表(人員)
- (完整word版)消化系統(tǒng)知識(shí)點(diǎn)整理
評(píng)論
0/150
提交評(píng)論