Java Proxy動態代理

常見使用場景(Spring AOP)

簡單例子

包結構

User類

UserService接口

UserService接口實現類

我的動態代理類(實現InvocationHandler接口)

測試使用動態代理的類

測試我的動態代理運行結果

解釋
我們的動態代理類實現了InvocationHandler接口

重寫invoke方法

使用示範


在原有接口方法被調用方法執行的基礎之上,在執行原有方法前加入了beforeSave()方法(自己寫的),
在執行之後調用了finishSave()方法,在調用原來接口中方法的基礎之上調用了其他方法,實現我們所需的功能,

比如計算該方法執行所需時間可以在方法前後獲取時間計算差值、日誌記錄
避免了使用代碼去入侵原來封裝好的對象,實現了我們要做的事情並且沒有污染模塊的源碼

關鍵代碼解釋:
 

UserService proxy=(UserService)Proxy.newProxyInstance(userService.getClass().getClassLoader(),new Class[]{UserService.class},userServiceProxy);

調用Proxy的newProxyInstance實例化一個新的動態代理對象

參數解釋
userService.getClass().getClassLoader() 被代理對象的classLoader
new Class[]{UserService.class}被代理的所有方法的接口數組(UserService是一個接口)
userServiceProxy我的動態代理(實現了InvocationHandler接口)

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