1.0 AOP相關(guān)的概念
aop:面向切面(方面)編程貌夕,擴展功能不修改源代碼實現(xiàn)僵缺。
aop采取橫向抽取機制获三,取代了傳統(tǒng)縱向繼承體系重復(fù)性代碼寸五。
aop 的底層使用動態(tài)代理方式實現(xiàn)梳凛。
連接點:類里面那些方法可以被增強,這些方法稱為連接點梳杏。
切入點:在類里面可以有很多的方法被增強伶跷,比如實際操作中,只是增強了類里面add方法和update方法秘狞,實際增強的方法稱為切入點。
通知/增強:增強的邏輯蹈集,稱為增強烁试,比如擴展日志的功能,這個日志功能稱為增強拢肆。
? ? ? ? 前置通知:在方法之前執(zhí)行减响;
? ? ? ? 后置通知:在方法之后執(zhí)行;
? ? ? ? 異常通知:方法出現(xiàn)異常執(zhí)行郭怪;
? ? ? ?最終通知:在后置之后執(zhí)行支示;
? ? ? 環(huán)繞通知:在方法之前和之后都執(zhí)行;
切面:把增強應(yīng)用到具體方法上面的過程稱為切面鄙才。即 把增強用到切入點的過程颂鸿。
2.0 spring 中aop操作
在spring里面進行aop操作,使用aspectj實現(xiàn)攒庵。
aspectj不是spring的一部分嘴纺,和spring一起使用完成aop操作。
aop需要的jar:
xml ? aop約束引入:
注解aop約束引入:
還要添加一個context約束浓冒。
ps:約束可以在spring docs中找到栽渴,頁面名稱為:XML Schema-based conf.html
aspectj基于xml配置aop:
使用表達式配置切人點,常用的表達式:
execution(<訪問修飾符>?<返回類型><方法名>(<參數(shù)><異常>))
(1)表示所有修飾符 在類Book中的add方法都增強
(2)表示所有修飾符 在類Book中的所有方法都增強
(3)所有修飾符的所有類的所有方法都增強
(4)所有修飾符 所有類中以sava開頭的方法都增強
注意:*后面要有空格
實例:
Book是被增強對象稳懒,MyBook是要增強的功能闲擦,所以配置的切入點是Book中的方法;
切面指的是把增強用到切入點的過程,可以認(rèn)為是<aop:aspect>節(jié)點墅冷,把myBook作為一個切面纯路;
<aop:before>表示用前置增強,增強方法是mybooke中的before1方法俺榆,要用到切入點pointcut1感昼;
環(huán)繞通知需要參數(shù)ProceedingJoinPoint:
aspectj基于注解配置aop:
開啟aop操作:
Book類中的所有方法都增強,這里是前置增強罐脊。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 時間:2017-05-02 23:09