scala trait實現AOP程式設計

2021-09-07 05:29:23 字數 1304 閱讀 2289

步驟1:宣告表示基本動作方法的模組taction
//宣告表示基本動作方法的模組taction

trait taction

步驟2:定義一下加入了前置處理和後置處理的特徵tbeforeafter

trait tbeforeafter extends taction 

}

通過上面的abstract override def doaction {}語句來覆蓋虛方法。具體來說這當中的super.doaction是關鍵,他呼叫了taction的doaction方法。其原理是,由於doaction是虛方法,所以實際被執行的是被呼叫的實體類中所定義的方法。、

步驟3:實現實際執行的實體類realaction

class realaction extends taction 

}

測試

object testtrait 

}

/entry before-action

** real action done!! **

/exit after-action

接著為他定義一下別的方面,然後將這些方面加入到同一物件的方法中。接著定義乙個將源方法執行兩遍的方面。

trait ttwiceaction extends taction 

}}

下面,將tbeforeafter和ttwiceaction混合在一起後執行一下。

/entry before-action

** real action done!! **

/exit after-action

==>no. 1

/entry before-action

** real action done!! **

/exit after-action

==>no. 2

伴隨著原來方法的before/after動作一起各自執行了兩次。接著將混入順序顛倒後再試一下。

/entry before-action

** real action done!! **

==>no. 1

** real action done!! **

==>no. 2

/exit after-action

這樣執行後,原來的實現方法被迴圈執行了兩次,但是before/after則在迴圈以外整體只執行了一次。這是根據with語句定義的順序來執行的,知道了這原理之後也就沒有什麼奇怪的了。scala特性的如此混入順序是和aspectj的方面以及spring的interceptor相同的。

註解實現AOP

使用註解實現aop,注意版本問題,使用註解報錯要匯入m en依賴 dependency groupid j ax.annotation groupid artifactid j ax.annotation api artifactid version 1.3.2 version dependency...

spring的AOP 基於XML實現AOP的過程

參考對應的 logaspect bean 或者 logaspect 類。logaspect類如下 package org.zttc.itat.spring.proxy import org.aspectj.lang.joinpoint import org.aspectj.lang.proceedi...

使用註解實現AOP

xml標頭檔案中加入 xmlns context xsi schemalocation spring context.xsd 宣告哪些包下有註解 當有兩個以上的包時,用 隔開 在demo類中加入 component 在方法上新增 pointcut 定義切點 component public clas...