1. 程式人生 > >AOP面向切面程式設計思想的原理(簡單理解)

AOP面向切面程式設計思想的原理(簡單理解)

閱讀本文章的前提:java基礎,具備java面向物件思想

深入學習需要了解知識點:jdk 靜態代理,動態代理,java繼承,多型,介面

AOP:面向切面程式設計思想是繼OOP面向物件程式設計思想後,又一個偉大思想。當你意識到這句話的時候,你大概已經理解了什麼是AOP;

什麼是切面:程式執行流程中的某一個特定點,在這個點你可以切入到原本的流程中,並且加入新的業務邏輯。

傳統切面:找到切入點後,修改切入點前後程式程式碼,進而加入新的邏輯。

AOP的核心是:原始碼無關性!也就是說,你加入的邏輯程式碼和業務程式碼是無關的兩部分程式碼,只在程式執行期間,你可以加入插入的邏輯,也可以不加入。

打個比方,AOP的切面就是建立了一個原來系統的分身。你可以任意修改系統分身,而不影響本體

,執行修改後分身,你得到了想要的結果,原本的業務邏輯是沒有任何變化的。

這樣做的好處:原始碼的無關性,主要業務邏輯和其他業務邏輯完全分離,耦合度極大降低。

實現AOP依賴的技術:JDK動態代理。我簡單介紹代理,靜態代理,動態代理,深入的瞭解大家可以參照其他大神。

代理:代理的本質就是分身。

為什麼要用代理:你不想或者不能直接做某件事,就要用到代理。比如:你到監獄想給一個犯人一個包裹,你是不能直接接觸犯人的,那麼你需要通過預警傳遞包裹。那麼這個預警就是代理。從取包裹來講,獄警就是犯人的分身,這個分身代替本體取得了包裹。如果這個包裹有炸彈,受害的是分身,而本體是不會受到影響的。

靜態代理和動態代理本質區別:你是否需要修改原始碼(不包含測試類),就可以控制代理內容的變化。

靜態代理:程式寫好之後,你想修改代理過程,就必須修改原始碼。

動態代理:程式寫好後,你更改代理過程。只需要修改代理物件(分身)

上面可能不好理解,理解重點是:為什麼動態代理這麼牛,他有什麼過人之處。

答案就在前面,靜態代理執行過程中,實際修改了原始碼,你改變過程就需要改變原始碼。

動態代理則不同,動態代理copy了一份原始碼,並且建立了分身。如果更改過程,我沒有修改原始碼,只是修改了copy的程式碼,並且建立了另外一個分身。

這個分身實現了效果,而這個分身無論生死,和本體原始碼無關。

前面獄警的例子就是動態代理,如果想取另外一個包裹,告訴獄警(犯人的分身)去做就好。過程中出現任何變動,都僅僅影響分身。

靜態代理的意思就是:我吃了一種藥,胳膊編的無限長(超出原來的部分就是靜態代理),我用自己的胳膊去取。如果被炸彈炸了,我的胳膊就沒了。

整個過程,我們認識到,動態代理我還是原來的我。而靜態代理實現這個動能,已經把我變成怪物了。

最後,我只是簡單說了下我的理解。想具體使用,請學習jdk 動態代理。和aop思想