切面(Aspect) 一個關注點的模塊化這個關注點可能會橫切多個對象事務管理是JEE應用中一個關於橫切關注點的很好的例子 在Spring AOP中切面可以使用通用類(基於模式的風格) 或者在普通類中以 @Aspect 注解(@AspectJ風格)來實現
連接點(Joinpoint) 在程序執行過程中某個特定的點比如某方法調用的時候或者處理異常的時候 在Spring AOP中一個連接點 總是 代表一個方法的執行 通過聲明一個orgaspectjlangJoinPoint類型的參數可以使通知(Advice)的主體部分獲得連接點信息
通知(Advice) 在切面的某個特定的連接點(Joinpoint)上執行的動作通知有各種類型其中包括aroundbefore和after等通知 通知的類型將在後面部分進行討論許多AOP框架包括Spring都是以攔截器做通知模型 並維護一個以連接點為中心的攔截器鏈
切入點(Pointcut) 匹配連接點(Joinpoint)的斷言通知和一個切入點表達式關聯並在滿足這個切入點的連接點上運行(例如當執行某個特定名稱的方法時) 切入點表達式如何和連接點匹配是AOP的核心Spring缺省使用AspectJ切入點語法
引入(Introduction) (也被稱為內部類型聲明(intertype declaration))聲明額外的方法或者某個類型的字段 Spring允許引入新的接口(以及一個對應的實現)到任何被代理的對象 例如你可以使用一個引入來使bean實現 IsModified 接口以便簡化緩存機制
目標對象(Target Object) 被一個或者多個切面(aspect)所通知(advise)的對象也有人把它叫做 被通知(advised) 對象 既然Spring AOP是通過運行時代理實現的這個對象永遠是一個 被代理(proxied) 對象
AOP代理(AOP Proxy) AOP框架創建的對象用來實現切面契約(aspect contract)(包括通知方法執行等功能) 在Spring中AOP代理可以是JDK動態代理或者CGLIB代理 注意Spring 最新引入的基於模式(schemabased)風格和@AspectJ注解風格的切面聲明對於使用這些風格的用戶來說代理的創建是透明的
織入(Weaving) 把切面(aspect)連接到其它的應用程序類型或者對象上並創建一個被通知(advised)的對象 這些可以在編譯時(例如使用AspectJ編譯器)類加載時和運行時完成 Spring和其他純Java AOP框架一樣在運行時完成織入
通知的類型
前置通知(Before advice) 在某連接點(join point)之前執行的通知但這個通知不能阻止連接點前的執行(除非它拋出一個異常)
返回後通知(After returning advice) 在某連接點(join point)正常完成後執行的通知例如一個方法沒有拋出任何異常正常返回
拋出異常後通知(After throwing advice) 在方法拋出異常退出時執行的通知
後通知(After (finally) advice) 當某連接點退出的時候執行的通知(不論是正常返回還是異常退出)
環繞通知(Around Advice) 包圍一個連接點(join point)的通知如方法調用這是最強大的一種通知類型 環繞通知可以在方法調用前後完成自定義的行為它也會選擇是否繼續執行連接點或直接返回它們自己的返回值或拋出異常來結束執行
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28064.html