spring的aop准备工作-导包定义通知
生活随笔
收集整理的這篇文章主要介紹了
spring的aop准备工作-导包定义通知
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
然后接下來準(zhǔn)備通知,這就是咱們要學(xué)的新內(nèi)容了,在Spring當(dāng)中,如何定義通知呢,看好,右鍵,new一個(gè)class,a_aspect,然后這兒的話咱們定義一個(gè)通知,通知英文名叫做Advice,MyAdvice,這個(gè)名詞就叫Advice,通知,咱們作為通知類,然后呢,在這個(gè)類當(dāng)中,Spring在AOP生成代理的時(shí)候,非常體貼,他根據(jù)咱們現(xiàn)實(shí)開發(fā)的情況,把通知分成了好多種,根據(jù)不同的需要,咱們挑選咱們需要通知的種類,哪些種通知,前置通知,后置通知,環(huán)繞通知,還有咱們的異常攔截通知,以及后置通知,有些人說后置通知重復(fù)了,沒有重復(fù),一種后置通知,如果出現(xiàn)異常,將不會(huì)調(diào)用它,如果出現(xiàn)異常不會(huì)調(diào)用,無論是否出現(xiàn)異常,都會(huì)調(diào)用,那所謂前置通知,前置通知看名字就知道,還記得通知名詞是啥意思吧,咱們打算增強(qiáng)目標(biāo)方法中的代碼,通知就是希望,你寫的這段通知代碼,是在目標(biāo)方法運(yùn)行之前調(diào)用,然后后置通知,是啥意思呢,是希望在目標(biāo)方法運(yùn)行之后調(diào)用,環(huán)繞通知呢,它是希望在目標(biāo)方法之前,和之后,都調(diào)用,那所謂異常攔截通知的話,從他名字也能看出來,如果出現(xiàn)異常,就會(huì)調(diào)用通知代碼,這個(gè)后置通知,在目標(biāo)方法運(yùn)行之后調(diào)用,區(qū)別已經(jīng)說了,一個(gè)是出現(xiàn)異常掉,一個(gè)是出現(xiàn)異常不調(diào),一共是分為5種通知,接下來這個(gè)通知,在類中怎么定義,在Spring中很簡單,使用方法來進(jìn)行控制的,聲明一個(gè)方法public void,before自己定義的,直觀點(diǎn)叫做before,咱們作為前置通知,那前置通知這里面要做什么事,看明白啥意思不,是不是很簡單,然后把這個(gè)復(fù)制一份,后置通知,后置方法名隨意,但是我為了讓你們看明白這個(gè)方法是什么通知,afterReturning,就是在目標(biāo)方法之后調(diào)用,這是后置通知,如果方法出現(xiàn)異常,不會(huì)調(diào)用,我把這句話也粘上,后面的是后置通知,咱們再來一個(gè)環(huán)繞通知,環(huán)繞通知方法名你們能看懂,around,環(huán)繞,環(huán)繞通知呢,是五種通知當(dāng)中最特別的一種通知,你可以看到,這環(huán)繞通知是在目標(biāo)方法之前和之后,都會(huì)調(diào)用,其實(shí)這就意味著,他要控制目標(biāo)方法調(diào)用的,也就是需要咱們手動(dòng)來調(diào)用目標(biāo)方法,在咱們目標(biāo)方法之前和之后,這是唯一特殊的通知,這個(gè)通知特殊在哪呢,你必須有一個(gè)參數(shù),叫ProceedJoinPoint對象,pjp,然后呢,通過這個(gè)對象,來調(diào)用咱們的pjp點(diǎn),這個(gè)方法叫做什么來的,在這呢,異常要拋就可以了,拋出這個(gè)異常,這行代碼,就是調(diào)用目標(biāo)方法代碼,就是調(diào)用目標(biāo)方法,咱們環(huán)繞通知,在目標(biāo)方法之前和之后加代碼,這是環(huán)繞通知之前的部分,然后復(fù)制一下,這是環(huán)繞通知之后的部分,看明白啥意思,你需要手動(dòng)來調(diào)用目標(biāo)方法,利用人家暴露的api調(diào)用目標(biāo)方法,人家暴露的api就是這樣的,這是要死記硬背的,然后這個(gè)方法還有一個(gè)特殊就是,還有一個(gè)返回值,你要把目標(biāo)方法返回值給return出去,是不是有點(diǎn)像剛才的動(dòng)態(tài)代理,動(dòng)態(tài)代理的源碼,就是這個(gè)意思,接下來再來看異常通知,異常通知方法名afterException,就是在異常出現(xiàn)之后,然后出現(xiàn)異常通知也打印一下,異常通知,最后一個(gè)后置通知,就是after,這個(gè)是后置通知,出現(xiàn)異常也會(huì)調(diào)用,剛才是出現(xiàn)異常不會(huì)調(diào)用,這個(gè)出現(xiàn)異常也會(huì)調(diào)用,這樣的話,咱們5類通知就定義好了,這就是咱們的通知類,通知的描述部分,下面是通知的定義部分,咱們看看這個(gè)流程,包也導(dǎo)好了,目標(biāo)對象也準(zhǔn)備好了,通知也準(zhǔn)備好了,咱們說代理簡單也簡單,無非就是把通知織入到目標(biāo)對象,所以最后只要你告訴Spring說,這是這些通知,你給我織入到目標(biāo)對象,只要在配置文件里一描述,這是不是就妥了,那咱們怎么來進(jìn)行配置的,是不是咱們要學(xué)的一個(gè)關(guān)鍵點(diǎn)
package com.learn.a_aspect;import org.aspectj.lang.ProceedingJoinPoint;/*** 通知類* @author Leon.Sun**/
public class MyAdvice {/*** 前置通知* |-目標(biāo)方法運(yùn)行之前調(diào)用*//*** 后置通知(如果出現(xiàn)異常不會(huì)調(diào)用)* |-在目標(biāo)方法運(yùn)行之后調(diào)用*//*** 環(huán)繞通知* |-在目標(biāo)方法之前和之后調(diào)用*//*** 異常攔截通知* |-如果出現(xiàn)異常,就會(huì)調(diào)用*//*** 后置通知(無論是否出現(xiàn)異常 都會(huì)調(diào)用)* |-在目標(biāo)方法運(yùn)行之后調(diào)用*/// --------------------------------------------------------------------/*** 前置通知*/public void before() {System.out.println("這是前置通知!!");}/*** 后置通知*/public void afterReturning() {System.out.println("這是后置通知!!(如果出現(xiàn)異常不會(huì)調(diào)用)");}/*** 環(huán)繞通知* @param pjp* @throws Throwable */public Object around(ProceedingJoinPoint pjp) throws Throwable {System.out.println("這是環(huán)繞通知之前的部分!!");/*** 調(diào)用目標(biāo)方法*/Object proceed = pjp.proceed();System.out.println("這是環(huán)繞通知之后的部分!!");return proceed;}/*** 異常通知*/public void afterException() {System.out.println("出事啦!出現(xiàn)異常啦!");}/*** 后置通知*/public void after() {System.out.println("后置通知(無論是否出現(xiàn)異常 都會(huì)調(diào)用)");}
}
?
總結(jié)
以上是生活随笔為你收集整理的spring的aop准备工作-导包定义通知的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring的aop名词解释
- 下一篇: spring的aop配置-配置将通知织入