03.22 Spring AOP--動態代理原理分析AOP技術

Spring AOP--動態代理原理分析AOP技術

讓我們再做一個動態代理的例子,你就馬上能夠能夠理解AOP是個啥東西。好讓我們開始定義一個Javabean,它十分簡單,也不需要我多做解釋:

Spring AOP--動態代理原理分析AOP技術

細心的讀者就看到了,正是我們AOP看到的前置消息,後置消息,環繞消息,正常返回後的消息,異常返回消息。外加一個flag標記,它的作用就等同於一個切點,至於什麼叫切點,這裡放放,不用管它,我們就知道它是個boolean值,是個開關就成了,而useAround意思是是否啟用環繞通知,也是一個開關。

一個十分簡單的接口和實現類:

Spring AOP--動態代理原理分析AOP技術

實現類:

Spring AOP--動態代理原理分析AOP技術

實現類也很簡單,跟著我們改寫一些我們上篇談到的代理類,還是兩個步驟:

  • 綁定HelloServiceImpl生成代理類

  • 實現代理方法

代碼如下:

Spring AOP--動態代理原理分析AOP技術

Spring AOP--動態代理原理分析AOP技術

好了,這個bind方法我們上篇論述過了,我們關注的是Invoke方法。

1、首先獲取一個ConfigBean,(如果是Spring就是攔截器)

2、其次判斷是否啟用一個ConfigBean進行處理(Spring切點判斷,它一般用正則式,大同小異),如果不用則直接反射真實對象HelloService的sayHello方法,完成任務,如果用,則走第3步

3、啟動前置通知before(Spring也是一樣)

4、進入try ... catch...,如果環繞通知標誌為true(spring是判斷有沒有環繞通知),則執行環繞通知;否則就反射被代理對象的方法。(Spring也是一樣)

5、反射後,可能發生異常或者不發生,不發生就進入afterReturn方法,正常返回通知;發生異常就進入afterThrowing方法,異常返回通知。(Spring也是一樣)

6、最後執行後置通知after方法,完成整個AOP的過程。(Spring也是一樣)

好了,上面就大概是Spring執行各類通知的過程,怎麼樣在動態代理的分析是不是比教科書的還要清晰?

最後我們測試一下這段代碼:

Spring AOP--動態代理原理分析AOP技術

好看看執行結果:

Spring AOP--動態代理原理分析AOP技術

在Spring的AOP中你拿到的就類似於這裡的代理對象——proxy,進行了動態代理。好了這裡分析了,切點,各類消息它們執行的過程,下一篇我們會更深入的討論AOP的原理,不過到這裡你已經基本掌握了AOP的整個過程。


分享到:


相關文章: