一、AOP基礎(chǔ)概念

二、Join point(連接點(diǎn))
程序執(zhí)行期間的某一個(gè)點(diǎn),例如執(zhí)行方法或處理異常時(shí)候的點(diǎn)。在 Spring AOP 中,連接點(diǎn)總是表示方法的執(zhí)行。org.aspectj.lang.JoinPoint 接口表示目標(biāo)類連接點(diǎn)對(duì)象,它定義這些主要方法。

三、Advice(通知)
通知是指一個(gè)切面在特定的連接點(diǎn)要做的事情。通知分為方法執(zhí)行前通知,方法執(zhí)行后通知,環(huán)繞通知等。許多 AOP 框架(包括 Spring)都將通知建模為攔截器,在連接點(diǎn)周圍維護(hù)一系列攔截器(形成攔截器鏈),對(duì)連接點(diǎn)的方法進(jìn)行增強(qiáng)。
四、Pointcut(切點(diǎn))
一個(gè)匹配連接點(diǎn)(Join point)的謂詞表達(dá)式。通知(Advice)與切點(diǎn)表達(dá)式關(guān)聯(lián),并在切點(diǎn)匹配的任何連接點(diǎn)(Join point)(例如,執(zhí)行具有特定名稱的方法)上運(yùn)行。切點(diǎn)是匹配連接點(diǎn)(Join point)的表達(dá)式的概念,是AOP的核心,并且 Spring 默認(rèn)使用 AspectJ 作為切入點(diǎn)表達(dá)式語(yǔ)言。
支持在切點(diǎn)定義中加入以下運(yùn)算符進(jìn)行復(fù)合運(yùn)算:

五、Aspect(切面)
它是一個(gè)跨越多個(gè)類的模塊化的關(guān)注點(diǎn),它是通知(Advice)和切點(diǎn)(Pointcut)合起來(lái)的抽象,它定義了一個(gè)切點(diǎn)(Pointcut)用來(lái)匹配連接點(diǎn)(Join point),也就是需要對(duì)需要攔截的那些方法進(jìn)行定義;它定義了一系列的通知(Advice)用來(lái)對(duì)攔截到的方法進(jìn)行增強(qiáng)。
六、Target object(目標(biāo)對(duì)象)
被一個(gè)或者多個(gè)切面(Aspect)通知的對(duì)象,也就是需要被 AOP 進(jìn)行攔截對(duì)方法進(jìn)行增強(qiáng)(使用通知)的對(duì)象,也稱為被通知的對(duì)象。由于在 AOP 里面使用運(yùn)行時(shí)代理,所以目標(biāo)對(duì)象一直是被代理的對(duì)象。
七、AOP proxy(AOP 代理)
為了實(shí)現(xiàn)切面(Aspect)功能使用 AOP 框架創(chuàng)建一個(gè)對(duì)象,在 Spring 框架里面一個(gè) AOP 代理要么指 JDK 動(dòng)態(tài)代理,要么指 CgLIB 代理。
八、Weaving(織入)
是將切面應(yīng)用到目標(biāo)對(duì)象的過(guò)程,這個(gè)過(guò)程可以是在編譯時(shí)(例如使用 AspectJ 編譯器),類加載時(shí),運(yùn)行時(shí)完成。Spring AOP 和其它純 Java AOP 框架一樣,是在運(yùn)行時(shí)執(zhí)行植入。
一個(gè)連接點(diǎn)可以同時(shí)匹配多個(gè)切點(diǎn),而切點(diǎn)所對(duì)應(yīng)的增強(qiáng)在連接點(diǎn)上織入順序的規(guī)則是這樣的:
①如果在同一個(gè)切面類中聲明的增強(qiáng),則按照增強(qiáng)在切面類中定義的順序進(jìn)行織入;
②如果增強(qiáng)位于不同的切面類中,并且這些切面類都實(shí)現(xiàn)了org.springframework.core.Ordered 接口,則由 Ordered 方法的順序號(hào)決定(順序號(hào)小的先織入);
③如果增強(qiáng)位于不同的切面類中,但這些切面類沒(méi)有實(shí)現(xiàn)org.springframework.core.Ordered 接口,織入的順序是不確定的。

九、Advisor
這個(gè)概念是從 Spring 1.2的 AOP 支持中提出的,一個(gè) Advisor 相當(dāng)于一個(gè)小型的切面,不同的是它只有一個(gè)通知(Advice),Advisor 在事務(wù)管理里面會(huì)經(jīng)常遇到。