如果用AOP技術監控我們的老婆呢?


上篇我們簡單的介紹了什麼是AOP,已經AOP使用在哪些場景中,其實已經在工作的朋友隨便看看自己的項目,AOP的應用還是隨處可見的。

那麼作爲一個入門的分享教程,這次就簡單的帶大家實現要給簡單的AOP的功能,如果每天在早上和晚上監視自己的老婆化妝和卸妝,希望通過有趣的例子,能帶大家對AOP有一個深刻的認識,並且能寫出來一個例子。

在進行例子之前,先給大家介紹一下SpringAOP的兩種代理機制,一種是基於JDK代理的;另一種是基於CGLib代理的。那麼大家可能就要問了,這兩種有什麼區別嗎?大家只要先簡單的瞭解,JDK本身只提供代理的接口,而不支持類的代理,但是CGLib卻可以支持類的代理;但是我們在實際項目中都是面向接口開發的,所以使用JDK代理可以滿足我們的大部分需求。

如何監視自己的老婆每天早上化妝和每天晚上卸妝呢?

我們先創建一個老婆每天化妝和卸妝的實現類,裏面去實現老婆每天化妝和卸妝的操作。


接下來我們是不是要寫我們監視老婆的操作。


接下來就是今天的重點了,現在我們還是監視不到老婆每天的化妝和卸妝,到底怎麼才能對她進行監視呢?接下來我們先看代碼。

我們想要監視我們的老婆就必須先實現InvocationHandler接口,大家可以通過代碼看到,它裏面實現了一個invoke(Object proxy, Method method, Object[] args),這幾個參數裏面proxy其實就是最終生成的代理類,method就是代理目標實例的某個具體的方法,通過它我們可以實現發起目標實例方法的反射調用;args就是被代理實例某個方法的入參,在方法反射調用的時候使用。method.invoke(targer,args);通過反射方法調用業務類的目標方法。

我們來看下如何測試:

首先先要實例化我們的目標對象,接下來就是將我們的目標業務類和我們要監視的操作結合在一起,最後我們通過Proxy.newProxyInstance()編制業務邏輯和我們監控的操作的handler創建一個符合WomanService接口的代理實例。方法的第一個參數爲類加載器;第二個參數爲創建代理實例所需的接口;第三個參數爲結合了我們業務邏輯和我們監控的操作的對象。

來看下結果,看有沒有對我們的老婆早晚進行到監控:


從結果中我們可以明顯的看出,我們對老婆每天的化妝和卸妝都做到了監控的操作,我們不需要在每個業務代碼中去進行監控的操作,與我們之前想象大不一樣,我們並沒有在每個業務層去進行監控,大大簡化了我們代碼。這就是AOP的魅力所在,今天就跟大家一個簡單的AOP的例子,還有好多的東西需要我們去深入的學習,謝謝大家。


更多精彩內容請關注”一個程序員的成長


本文分享自微信公衆號 - 一個程序員的成長(xiaozaibuluo)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章