天天看點

Spring---->AOP的術語

AOP術語

AOP: Aspect Oriented Programming 面向切面程式設計。

   可以通過預編譯方式和運作期動态代理實作在不修改源代碼的情況下給程式動态統一添加功能的一種技術。AOP實際是GoF設計模式的延續,設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,AOP可以說也是這種目标的一種實作。

利用AOP可以對業務邏輯的各個部分進行隔離,進而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率。

主要的功能是:日志記錄,性能統計,安全控制,事務處理,異常處理等等。

主要的意圖是:将日志記錄,性能統計,安全控制,事務處理,異常處理等代碼從業務邏輯代碼中劃分出來,通過對這些行為的分離,我們希望可以将它們獨立到非指導業務邏輯的方法中,進而改變這些行為的時候不影響業務邏輯的代碼。

切面(Aspect)

切面是你要實作的交叉功能。它是應用系統子產品化的一個切面或領域。切面的最常見(雖然簡單)例子是日志記錄。日志記錄在系統中到處需要用到,利用繼承來重用日志子產品不适合。然而,你可以建立一個日志記錄切面,并且使用AOP在系統中應用。

連接配接點(Joinpoint)

連接配接點是應用程式執行過程中插入切面的地點。這個地點可以是方法調用,異常抛出,或者甚至是要修改的字段。切面代碼在這些地方插入到你的應用流程中,添加新的行為。

通知(Advice)

通知切面的實際實作。它通知應用系統新的行為。在日志例子中,日志通知包含了實作實際日志功能的代碼,如向日志檔案寫日志。通知在連接配接點插入到應用系統中。我們可以通過Advice中添加一個JoinPoint參數,這個值會由spring自動傳入,從JoinPoint中可以取得參數值、方法名等等

切入點(Pointcut)

切入點定義了通知應該應用在哪些連接配接點。通知可以應用到AOP架構支援的任何連接配接點。當然,你并不希望把所有切面應用到所有可能的連接配接點上。切入點讓你指定通知應用到什麼地方。通常通過指定類名和方法名,或者比對類名和方法名式樣的正規表達式來指定切入點。一些AOP架構允許動态建立切入點,在運作時根據條件決定是否應用切面,如方法參數值。

引入(Introduction)

引入允許你為已存在類添加新方法和屬性。例如,你可以建立一個稽查通知來記錄對象的最後修改時間。隻要用一個方法setLastMofified(Date)以及一個儲存這個狀态的變量。可以在不改變已存在類的情況下将這個引入,給他們新的行為和狀态。

目标對象(Target)

目标對象是被通知對象。它既可以是你編寫的類也可以是你要添加制定行為的第三方類。如果沒有AOP,這個類就必須要包含它的主要邏輯以及其他交叉業務邏輯。有了AOP,目标對象就可以全身心地關注主要業務,忘記應用其上的通知。

代理(Proxy)

代理是将通知應用到目标對象後建立的對象。對于客戶對象來說,目标對象(應用AOP之前的對象)和代理對象(應用AOP之後的對象)是一樣的。也就是,應用系統的其他部分不用為了支援代理對象而改變。

織入 (Weaving)

織入是将切面應用到目标對象進而建立一個新的代理對象的過程。切面在指定接入點被織入到目标對象中。