一、示例概述
本篇部落格的示例比較簡單,其實就是使用runtime的方法交換來實現aop面向切面程式設計。下方這兩個檔案就是我們本篇部落格所涉及的核心檔案。testclass顧名思義就是我們的測試類,而testclass+logging就是testclass的切片,testclass+logging會在testclass不知情的情況下做一些事情。
下方**段就是testclass類中的測試方法,該方法是非常簡單的,只有一行輸出語句
下方是未新增切片時的執行結果,是比較正常的,如下所示:
二、建立切片
接下來我們來建立切片,我們就在testclass的類目中建立相應的切片。切片實現本質就是講切入點的方法實現與切片中的方法進行交換。接下來我們就來實現這一過程,其實下方的**在我們之前聊runtime的時候就已經聊過了。今天的主題不是rumtime, 而是aop, 所以關於runtime的東西在此就不做過多贅述了。
下方就是本篇部落格實現aop的核心**:方法交換。
下方就是在testclass中的類目中呼叫方法交換要做的事情。首先在load()方法中呼叫方法交換的方法,將切入點testmethod()方法與我們新增的新的方法logtestmethod()進行交換,然後在我們新的方法中呼叫logtestmethod()。因為testmethod()與logtestmethod()方法的方法實現以及交換了,呼叫testmethod()即為呼叫logtestmethod()方法的實現,而呼叫logtestmethod()方法時,則呼叫testmethod()方法的實現。
當然這一塊比較繞,不過好好捋捋還是不難搞明白的。
三、切片執行結果
新增完上述切片後,我們再次呼叫testclass物件的testmethod()方法時就會先呼叫before()方法,然後執行testmethod()原有的方法體,然後執行after()方法。執行效果如下所示。
當然本篇部落格的內容比較簡單,但是還是比較有意思的。關於oc中更全面的aop的實現請移步於github上的第三方庫aspects。當然aspects也是由oc寫的,並在github上可以找到其相應的**實現,有興趣的可以去看看。
aop 面向切面程式設計
起源 研究人員就對物件導向思想的侷限性進行了分析。他們研究出了一種新的程式設計思想,借助這一思想或許可以通過減少 重複模組從而幫助開發人員提高工作效率。隨著研究的逐漸深入,aop也逐漸發展成一套完整的程式設計思想,各種應用aop的技術也應運而生。aop思想 定義乙個切面,在切面的縱向定義處理方法,處...
AOP面向切面程式設計
1 概念 面向切面程式設計,通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。aop是oop的延續,利用aop可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率 2 作用 1.解耦,將通用性的功能模組 與業務 解耦 ioc專...
AOP 面向切面程式設計
aop aspect oriented programming 即面向切面程式設計,可以說是oop object oriented programming 物件導向程式設計的補充和完善。面向切面程式設計是物件導向中的一種方式而已。在 執行過程中,動態嵌入其他 叫做面向切面程式設計。常見的使用場景 日...