以下是比較專業的術語。
- Joinpoint(連接點):所謂連接點是指那些被攔截到的點。在Spring中,這些點指的是方法,因爲Spring只支持方法類型的連接點。
- Pointcut(切入點):所謂切入點是指我們要對哪些Joinpoint進行攔截的定義。
- Advice(通知/增強):所謂通知是指攔截到Joinpoint之後所要做的事情就是通知。通知分爲前置通知、後置通知、異常通知、最終通知和環繞通知(切面要完成的功能)。
- Aspect(切面):是切入點和通知的結合。
- Target(目標對象):代理的目標對象(要增強的類)
- Weaving(織入):是指把增強應用到目標對象來創建新的代理對象的過程。Spring採用動態代理織入,而AspectJ採用編譯期織入和類裝載期織入。
- Proxy(代理):一個類被AOP織入增強後,就產生一個結果代理類。
- Introduction(引介):引介是一種特殊的通知在不修改類代碼的前提下,Introduction可以在運行期爲類動態地添加一些方法或Field。
例如有如下一個類:
public class User {
public void add() {
}
public void update() {
}
public void delete() {
}
}
下面是用比較通俗易懂的話來闡述AOP開發中的常見的相關術語:
- 連接點:在User類裏面有3個方法,這3個方法都可以被增強,類裏面的哪些方法可以被增強,這些方法就可被成爲連接點。
- 切入點:在一個類中可以有很多的方法被增強,在實際操作中,如若只增強了類裏面的add方法,則實際增強的方法被稱爲切入點。
增強/通知:比如增強User類裏面的add方法,在add方法中添加了日誌功能,這個日誌功能就稱爲增強。
通知類型:- 前置通知:在增強的方法執行之前進行操作。
- 後置通知:在增強的方法執行之後進行操作。
- 環繞通知:在增強的方法執行之前和執行之後進行操作。
- 最終通知:增強了兩個方法,執行第一個方法,執行第二個方法,在第二個方法執行之後進行操作。
也可理解爲後置通知後面執行的通知或者無論目標方法是否出現異常,最終通知都會執行。 - 異常通知:程序出現異常之後執行的通知。
- 切面:把增強應用到切入點的過程。即把具體增強的邏輯用到具體的方法上面的過程。
- 目標對象:增強的方法所在的類,即要增強的類。
- Weaving(織入):是指把增強應用到目標對象的過程。即把把advice應用到target的過程。