--- robots: index, follow lang: zh-tw dir: ltr breaks: true title: spring AOP # 簡報的名稱 tags: spring,java,Note # 簡報的標籤 --- # spring AOP ### AOP全名為Aspect-Oriented Programming,有關於AOP的許多名詞術語都過於抽象,單從字面上並不容易理解其名詞意義,這邊將以之前介紹代理機制的範例來逐一對照以介紹AOP的術語與觀念: ---  Cross-cutting concern Cross-cutting concerns若直接撰寫在負責某商務的物件之流程中,會使得維護程式的成本增高,例如若您今天要將物件中的記錄功能修改或是移除該服務,則必須修改所 有撰寫曾記錄服務的程式碼,然後重新編譯,另一方面,Cross-cutting concerns混雜於商務邏輯之中,使得商務物件本身的邏輯或程式的撰寫更為複雜。 現在為了要加入日誌(Logging)與安全(Security)檢查等服務,物件的程式碼中若被硬生生的寫入相關的Logging、Security程式片段,則可使用以下圖解表示出Cross-cutting與Cross-cutting concerns的概念: ---  Aspect 將散落於各個商務物件之中的Cross-cutting concerns收集起來,設計各個獨立可重用的物件,這些物件稱之為Aspect,例如在 動態代理 中 將日誌的動作設計為一個LogHandler類別,LogHandler類別在AOP的術語就是Aspect的一個具體實例,在AOP中著重於 Aspect的辨認,將之從商務流程中獨立出來,在需要該服務的時候,縫合(Weave)至應用程式之上,不需要服務的時候,也可以馬上從應用程式中脫 離,應用程式中的可重用元件不用作任何的修改,例如在 動態代理 中的HelloSpeaker所代表的角色就是應用程式中可重用的元件,在它需要日誌服務時並不用修改本身的程式碼。 另一方面,對於應用程式中可重用的元件來說,以AOP的設 計方式,它不用知道處理提供服務的物件之存在,具體的說,與服務相關的API不會出現在可重用的應用程式元件之中,因而可提高這些元件的重用性,您可以將 這些元件應用至其它的應用程式之中,而不會因為目前加入了某些服務而與目前的應用程式框架發生耦合。 Advice Aspect的具體實作稱之為Advice,以日誌的動作而言,Advice中會包括真正的日誌程式碼是如何實作的,像是動態代理 中的LogHandler類別就是Advice的一個具體實例,Advice中包括了Cross-cutting concerns的行為或所要提供的服務。 Joinpoint Aspect在應用程式執行時加入商務流程的點或時機稱之為Joinpoint,具體來說,就是Advice在應用程式中被呼叫執行的時機,這個時機可能是某個方法被呼叫之前或之後(或兩者都有),或是某個例外發生的時候。 Pointcut Pointcut是一個定義,藉由這個定義您可以指定某個Aspect在哪些Joinpoint時被應用至應用程式之上。具體的說,您可以在某個定義檔中撰寫Pointcut,當中說明了哪些Aspect要應用至應用程式中的哪些Joinpoint。 Target 一個Advice被應用的對象或目標物件,例如 動態代理 中的HelloSpeaker就是LogHandler這個Advice的Target。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up