《ASPECTJ學習筆記》

oxoxooxx發表於2012-04-06

《ASPECTJ學習筆記》
1.AOP的幾個概念:
☆JoinPoint(連線點)-應用程式中某個特定的點,該點可以執行某個通知事件。
AspectJ支援的連線點:
方法
建構函式
欄位
靜態初始化塊
方面通知執行
物件初始化之前、期間

☆Pointcut(切點)-用於宣告一組連線點,在這組連線點發生的時候呼叫到一定的通知
AspectJ支援的切入點:
call:方法呼叫切入點
execution:方法執行切入點
target、this
get、set
args
initialization、staticinitialization、preinstialization
within、withincode
cflow、cflowbelow
&&、||、!

☆Advice(通知)-在符合特定條件的情況下執行具體動作的程式碼的語言構造子稱為通知,即宣告在連線點被呼叫時應該執行的動作。依據切入點的語義,將通知分為以下三類:
※ Before advice:在連線點之前執行;
※ After advice :在連線點之後執行;
※ Around advice :代替原連線點處方法的執行。
能夠決定匹配的連線點是否繼續執行
能夠改變連線點的返回值
能夠改變當前連線點的引數

☆Aspect(方面):一個方面是封裝橫切關注點的一個獨立的標準單元,類似於物件導向程式設計中的類。其中包括通知和切入點的定義。

☆Crosscutting concern(橫切關注點)

☆編織(weave),是將核心關注點和橫切關注點有機融合的過程。
※ 編譯時編織(compile-time weaving):在編譯的過程中進行編織
※ 編譯後編織(post-compile weaving):對已經編譯好的位元組碼進行編織
※ 載入時編織(load-time weaving):在類被載入進JVM的時候進行編織,在載入時透過aop.xml對編織的物件進行控制


2.簡單例子
(一)普通示例
public aspect LogExceptions{
public pointcut recording():call(public * com.icefeish..*(..));

after() throwing(Exception e):recordlog(){
logger.error("Error in calling method",e);
}
}
(二)使用註解的方式示例
@Aspect
public class SayAspect {
@Pointcut("execution(void HelloWorld.sayHello())")
public void say() {}

@Before("say()")
public before(){
System.out.println("before say hello....");
}

@After("say()")
public after(){
System.out.println("after say hello....");
}
}

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23937368/viewspace-1057834/,如需轉載,請註明出處,否則將追究法律責任。