1.AOP概述
AOP為Aspect Oriented Programming的縮寫, 意為:面向切面編程, 通過預(yù)編譯方式和運(yùn)行期動態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù). AOP是OOP的延續(xù), 是函數(shù)式編程的一種衍生范型. 利用AOP可以對業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離, 從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低, 提高程序的可重用性, 同時(shí)提高了開發(fā)的效率。
AOP的作用及優(yōu)勢
作用:
在程序運(yùn)行期間,不修改任何相關(guān)源碼對已有方法進(jìn)行增強(qiáng)。
優(yōu)勢:
減少重復(fù)代碼、提高開發(fā)效率、維護(hù)方便AOP相關(guān)術(shù)語
Joinpoint(連接點(diǎn)):
所謂連接點(diǎn)是指那些被攔截到的點(diǎn)。在spring中,這些點(diǎn)指的是方法,因?yàn)閟pring只支持方法類型的連接點(diǎn)。
---就是根據(jù)規(guī)則,可以指定攔截的方法,我們將每一個(gè)被攔截的方法稱為連接點(diǎn)。
Pointcut(切入點(diǎn)):
--所謂的切入點(diǎn),就是攔截方法設(shè)置的規(guī)則
所謂切入點(diǎn)是指我們要對哪些Joinpoint進(jìn)行攔截的定義。
Advice(通知/增強(qiáng)):
--就是可以設(shè)置在方法之前攔截或者方法執(zhí)行之后攔截或者方法出異常后攔截,或者方法之前和之后都攔截。我們將這些攔截場景稱為通知
所謂通知是指攔截到Joinpoint之后所要做的事情就是通知。
通知的類型:前置通知,后置通知,異常通知,最終通知,環(huán)繞通知。
Aspect(切面):
--所謂的切面就是我們的攔截處理類。
是切入點(diǎn)和通知的結(jié)合。
Weaving(織入):
-把切面加入到對象,并創(chuàng)建出代理對象的過程。(該過程由Spring來完成)
Spring的AOP
Spring通過動態(tài)代理模式的實(shí)現(xiàn)后,我們可以定義AOP其實(shí)就是用于通過規(guī)則設(shè)置來攔截方法,加入可以統(tǒng)一處理的代碼。基于XML配置AOP的標(biāo)簽
1、 <aop:config>
作用:
用于聲明開始aop的配置
2、 <aop:aspect>
作用:
用于配置切面。
屬性:
id:給切面提供一個(gè)唯一標(biāo)識。
ref:引用配置好的通知類bean的id。
3、 <aop:pointcut>
作用:
用于配置切入點(diǎn)表達(dá)式
屬性:
expression:用于定義切入點(diǎn)表達(dá)式。
id:用于給切入點(diǎn)表達(dá)式提供一個(gè)唯一標(biāo)識。
4、 <aop:before>
作用:
用于配置前置通知
屬性:
method:指定通知中方法的名稱。
pointct:定義切入點(diǎn)表達(dá)式
pointcut-ref:指定切入點(diǎn)表達(dá)式的引用
5、 <aop:after-returning>
作用:
用于配置后置通知,如果出了異常就一定不會調(diào)用切面的方法
屬性:
method:指定通知中方法的名稱。
pointct:定義切入點(diǎn)表達(dá)式
pointcut-ref:指定切入點(diǎn)表達(dá)式的引用
6、 <aop:after-throwing>
作用:
用于配置異常通知,只有出了異常才會調(diào)用切面對應(yīng)的方法
屬性:
method:指定通知中方法的名稱。
pointct:定義切入點(diǎn)表達(dá)式
pointcut-ref:指定切入點(diǎn)表達(dá)式的引用
7、 <aop:after>
作用:
用于配置最終通知,不管出不出異常,調(diào)用的切面的方法
屬性:
method:指定通知中方法的名稱。
pointct:定義切入點(diǎn)表達(dá)式
pointcut-ref:指定切入點(diǎn)表達(dá)式的引用
8、 <aop:around>
作用:
用于配置環(huán)繞通知
屬性:
method:指定通知中方法的名稱。
pointct:定義切入點(diǎn)表達(dá)式
pointcut-ref:指定切入點(diǎn)表達(dá)式的引用