常見使用場景(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接口)