【AOP系列】(二)—AOP相關概念
前提
在閱讀本篇博文之前,請先閱讀上篇博文【AOP系列】(一)—靜態代理VS動態代理(Java) ,因為下文中在解釋一些概念時,會用到上篇博文中的例子。
思維導圖
概念解釋
橫切性關注點(Cross Cutting Concern):獨立服務,如系統日誌。如果不是獨立服務(與業務耦合)就不能橫切了。通常這種獨立服務需要遍佈系統各個角落,遍佈在業務流程之中。
切面(Aspect):日誌服務會單獨寫到一個類中,如LogHandler,這個類叫做切面。基於AOP的程式設計關鍵是能找到橫切性的關注點,形成切面。
模組化:把日誌這種服務單獨抽到一個類中,這一過程稱作模組化。
Advice:在LogHandler這個類中對日誌服務做的具體實現(也就是對橫切性關注點的具體實現):可以是一句程式碼(system.out.println),也可是一個方法。Advice可以分類:BeforeAdvice,AfterAdvice,區別在於Advice在目標方法之前呼叫還是之後呼叫,Throw Advice 表示當目標發生異常時呼叫Advice。
PointCut(看做一種約束):指Advice會應用在目標物件的哪些目標方法中,如只應用再add,delete,modify方法上,不應用在select方法上,實際當中需要用表示式進行限制。
Target Object
:目標物件。JoinPoint:在目標物件中,將會應用Advice的方法或屬性(AspectJ支援將屬性作為JoinPoint),這些叫做連線點。
織入(Weave):即Advice應用在JoinPoint的過程,這個過程有個專業術語,不叫應用,叫織入:
Proxy:(可有可無),動態織入建立代理效率慢,有些是在編譯時靜態織入,不會產生代理類。
Introduction:動態為某個類增加或減少方法(這個暫時不理解,先寫到這裡)。
總結
瞭解這些概念,不是為了讓大家記住,而是更好地去理解AOP思想。雖然AOP的全稱是Aspect Oriented Programming,但是經我一總結,也可以解釋為A
spect,Object(Target Object),Proxy。也是蠻有意思的啊!