AOP(Aspect Oriented Programming)面向切面編程,AOP的作用不過多介紹,本文是主要是介紹AOP的成員,是我在複習的時候記錄的一些筆記,方便以後查閱方便一些。
JointPoint(連接點),在系統運行的之前,AOP的功能模塊都需要織入到OOP的功能模塊上,JointPoint就代表了在哪些執行點上進行織入操作的點。JointPoint可以是類的初始化、方法的調用、方法的執行、方法的調用、字段設置、字段獲取、異常處理執行等。下面舉例說明:
publicclass Main{ publicstaticvoid main(String[] args) { //JointPointTest類見上面代碼
JointPointTest jointPointTest = new JointPointTest();//構造方法執行 jointPointTest.setName("aaa");//字段設置(通過set方法與直接賦值的觸發時間是相同的) jointPointTest.getName();//字段獲取 jointPointTest.toDo();//方法調用。方法執行即進入toDo方法的內部,對於同一對象方法的調用要早與方法的執行。
//異常處理執行,即當某些類型異常拋出的時候,對應的異常處理邏輯執行點。
//類的初始化, 類的靜態類型或者靜態塊的初始化時點。 }}
Pointcut(切入點),簡單的理解就是JointPoint的集合。Pointcut代表的是JointPoint的表述方式,當橫切邏輯織入到當前系統的時候,需要參照Pointcut規定的JointPoint信息。
Pointcut的表述方式有很多:
1.直接指定JointPoint所在方法名稱。(一般不用,因爲配置較多的情況比較不好表述。)
2.正則表達式。
3.使用特定的Pointcut表述語言。例如AspectJ,Spring默認使用的就是AspectJ的Pointcut表述語言。
Pointcut運算(Pointcut與Pointcut之前還可以進行邏輯運算,這樣我們就可以得到我們需要的較爲複雜的Pointcut),不同的AOP實現產品不同,所以運算的表達方式不盡相同。
Advice(通知),Advice很好理解就是JointPoint的執行時機。
可以分爲:
1. 前置通知(before advice):在JointPoint指定位置之前執行。
2. 後置通知(after advice):在JointPoint指定位置之後執行。分爲以下三種:
1) after return advice :只有當前JointPoint處流程正常結束後才執行after return advice。(即沒有異常出現)
2) after throwing advice :只有當前JointPoint處流程拋出異常時候才執行after throwing advice。
3) after advie :或許叫after finally advice比較準確,它是不管當前JointPoint是否正常結束都會執行,就像JAVA當中的finally塊中的代碼一樣。
3. 環繞通知(around advice):可以再JointPoint之前和之後都指定相應的處理流程。
4. introduction:與其他的通知不同,introduction不是根據JointPoint的執行時機來區分的,而是根據它可以完成的功能而區別其他的advice。
Aspect(切面),是對系統的advice與pointcut進行模塊化封裝的AOP概念實體。可以包含多個pointcut與advice的相關定義。AspectJ可以使用@AspectJ註解並且結合普通的POJO來聲明Aspect。
上面介紹的就是AOP的基本成員,雖然是自己便於以後查閱,但是同時希望對大家有所幫助。