javascript
SpringAOP的SchemaBase方式
文章目錄
- 1、SpringAOP的專(zhuān)業(yè)概念:
- 2、SpringAOP的SchemaBase方式基本流程
- SchemaBase方式環(huán)繞通知方式實(shí)現(xiàn)AOP
- SchemaBase方式的異常通知
- SpringAOP的SchemaBase方法的參數(shù)
1、SpringAOP的專(zhuān)業(yè)概念:
真實(shí)對(duì)象: 要進(jìn)行功能擴(kuò)展的對(duì)象,相當(dāng)于A對(duì)象
代理對(duì)象: 完成功能擴(kuò)展的對(duì)象,相當(dāng)于B對(duì)象.
切點(diǎn): 要進(jìn)行功能擴(kuò)展的方法,相當(dāng)于testA()方法
前置通知方法: 在切點(diǎn)之前執(zhí)行的擴(kuò)展方法
后置通知方法: 在切點(diǎn)之后執(zhí)行的擴(kuò)展方法
切面: 由前置通知+切點(diǎn)+后置通知形成的橫向執(zhí)行的面
織入: 由前置通知+切點(diǎn)+后置通知形成切面的過(guò)程
AOP的概念: 面向切面的編程(在不改變?cè)写a的基礎(chǔ)上擴(kuò)展功能)
SpringAOP的本質(zhì)總結(jié):
我們將要進(jìn)行功能擴(kuò)展相關(guān)的材料以及對(duì)應(yīng)的組織規(guī)則告訴Spring容器,Spring容器幫我們動(dòng)態(tài)創(chuàng)建一個(gè)代理對(duì)象。我們直接從Spring容器中獲取代理對(duì)象完成功能開(kāi)發(fā)。
2、SpringAOP的SchemaBase方式基本流程
①導(dǎo)入SpringAOP的jar包
②在src下創(chuàng)建包advice,并創(chuàng)建前置通知類(lèi)和后置通知類(lèi)
前置通知類(lèi)
創(chuàng)建一個(gè)普通的java類(lèi),實(shí)現(xiàn)MethodBeforeAdvice接口,
重寫(xiě)before方法,在before方法中聲明擴(kuò)展前的邏輯代碼。
后置通知類(lèi):
創(chuàng)建一個(gè)普通的Java類(lèi),實(shí)現(xiàn)AfterReturningAdvice接口,重寫(xiě)after方法,并在after方法中聲明擴(kuò)展后的邏輯代碼。
③在applicationcontext.xml文件中配置資源的bean對(duì)象以及聲明組裝規(guī)則。
資源對(duì)象:
要進(jìn)行功能擴(kuò)展的bean對(duì)象
前置通知的bean對(duì)象
后置通知的bean對(duì)象
聲明組裝規(guī)則:(使用AOP標(biāo)簽完成)
聲明切點(diǎn)
聲明組裝
④從Spring容器中直接獲取代理對(duì)象完成功能開(kāi)發(fā)
注意:如果讓Spring容器對(duì)象某個(gè)bean對(duì)象按照AOP進(jìn)行功能擴(kuò)展,則從Spring容器中使用該對(duì)象的ID獲取的對(duì)象已經(jīng)不是其本身了,而是他的代理對(duì)象
SchemaBase方式環(huán)繞通知方式實(shí)現(xiàn)AOP
解釋:
前面我們已經(jīng)使用前置通知方式和后置通知方式完成了AOP的擴(kuò)展代碼的編寫(xiě)。而我們之前學(xué)過(guò)過(guò)濾器的概念,在過(guò)濾器中會(huì)先執(zhí)行一部分代碼,執(zhí)行后如果放行了則繼續(xù)執(zhí)行Servlet,Servlet執(zhí)行后再次回到過(guò)濾器中執(zhí)行。那么,從AOP的角度過(guò)濾器就相當(dāng)于Servlet的擴(kuò)展對(duì)象了。過(guò)濾器中的攔截方法,就相當(dāng)于擴(kuò)展方法,而我們將擴(kuò)展代碼和調(diào)用原有切點(diǎn)方法的代碼全部直接聲明在一個(gè)方法中了,那么能不能采用此種方案來(lái)完成我們會(huì)自己的AOP擴(kuò)展呢?
實(shí)現(xiàn):
環(huán)繞通知
特點(diǎn):
將擴(kuò)展代碼和調(diào)用原有切點(diǎn)方法的代碼聲明在一起,簡(jiǎn)化擴(kuò)展流程。也就說(shuō)環(huán)繞通知中包含了前置通知和后置通知。
使用:
①創(chuàng)建一個(gè)普通Java類(lèi),實(shí)現(xiàn)環(huán)繞通知的接口。
②在applicationcontext.xml文件中配置環(huán)繞通知的bean
③在組裝規(guī)則中使用配置環(huán)繞通知的組裝。
注意:前置通知和后置通知和環(huán)繞通知可以同時(shí)使用,執(zhí)行順序和配置順序相關(guān)。
SchemaBase方式的異常通知
問(wèn)題:
在我們封裝一個(gè)功能方法時(shí),一般方法處理數(shù)據(jù)所造成的異常信息需要拋出,或者代碼編譯沒(méi)有問(wèn)題,運(yùn)行期間出現(xiàn)問(wèn)題,該異常也應(yīng)該有調(diào)用者來(lái)處理。那么在SpringAOP中,代理對(duì)象是動(dòng)態(tài)生成的,在代理對(duì)象中會(huì)調(diào)用前置通知,后置通知,環(huán)繞通知,切點(diǎn)方法,那么如果這些方法出現(xiàn)異常信息,理論上來(lái)說(shuō)應(yīng)該在擴(kuò)展對(duì)象中的擴(kuò)展方法中完成異常的處理。但是尷尬的是,代理對(duì)象是動(dòng)態(tài)生成的,不是由我們創(chuàng)建類(lèi)然后根據(jù)類(lèi)文件創(chuàng)建出來(lái)的,那么我們就無(wú)法直接的聲明異常處理代碼了,怎么辦呢?
解決:
在外部聲明異常處理的功能方法,讓SpringAOP動(dòng)態(tài)生成的代理對(duì)象,在生成的catch中調(diào)用我們聲明的異常處理方法即可。
使用:
①創(chuàng)建一個(gè)普通Java類(lèi),實(shí)現(xiàn)異常接口。
②在applicationcontext.xml文件中配置異常通知bean對(duì)象
③在applicationcontext.xml文件中配置異常通知bean的組裝
SpringAOP的SchemaBase方法的參數(shù)
[1]前置通知
使用:
①聲明一個(gè)普通Java類(lèi),實(shí)現(xiàn)BeforeAdvice接口。
②在Spring配置文件中配置前置通知的bean對(duì)象
③配置組裝
方法:
方法名:before
調(diào)用者:代理對(duì)象中的擴(kuò)展方法調(diào)用
方法體:聲明切點(diǎn)之前執(zhí)行的擴(kuò)展代碼
參數(shù):
( Method method, Object[] objects, Object o )
參數(shù)的作用:
[2]后置通知
使用:
①聲明一個(gè)普通Java類(lèi),實(shí)現(xiàn)AfterReturningAdvice接口。
②在Spring配置文件中配置后置通知的bean對(duì)象
③配置組裝
方法:
方法名:after
調(diào)用者:代理對(duì)象中的擴(kuò)展方法調(diào)用
方法體:聲明切點(diǎn)之后執(zhí)行的擴(kuò)展代碼
參數(shù):
( Object o, Method method, Object[] objects, Object o1 )
參數(shù)的作用:
[3]環(huán)繞通知
使用:
①聲明一個(gè)普通Java類(lèi),實(shí)現(xiàn)MethodInterceptor接口。
②在Spring配置文件中配置環(huán)繞通知的bean對(duì)象
③配置組裝
方法:
方法名:invoke
調(diào)用者:代理對(duì)象中的擴(kuò)展方法調(diào)用
方法體:聲明擴(kuò)展代碼同時(shí)根據(jù)需求是否放行。
參數(shù):
( MethodInvocation methodInvocation )
參數(shù)的作用:
[4]異常通知
使用:
①聲明一個(gè)普通Java類(lèi),實(shí)現(xiàn)ThrowAdvice接口。
②在Spring配置文件中配置異常通知的bean對(duì)象
③配置組裝
方法:
方法名:afterThrowing
調(diào)用者:代理對(duì)象中的擴(kuò)展方法的catch中調(diào)用
方法體:根據(jù)異常信息處理異常。
參數(shù):
( Exception ex )
參數(shù)的作用:
獲取異常信息
總結(jié)
以上是生活随笔為你收集整理的SpringAOP的SchemaBase方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2021丰田雷凌1.2t豪华版功能配置?
- 下一篇: SpringAOP的Aspectj方式*