Java動態代理的InvocationHandler設計的問題java
Java的動態代理須要一個InvocationHandler實例,這個實例就是代理處理程序。api
這個接口中有一個方法:數組
Objectinvoke(Object proxy, Method method, Object[] args) throws Throwable
proxy
- 在其上調用方法的代理實例
method
- 對應於在代理實例上調用的接口方法的
Method
實例。
Method
對象的聲明類將是在其中聲明方法的接口,該接口能夠是代理類賴以繼承方法的代理接口的超接口。
args
- 包含傳入代理實例上方法調用的參數值的對象數組,若是接口方法不使用參數,則爲
null
。基本類型的參數被包裝在適當基本包裝器類(如
java.lang.Integer
或
java.lang.Boolean
)的實例中。
null
而且接口方法的返回類型是基本類型,則代理實例上的方法調用將拋出
NullPointerException
。不然,若是此方法返回的值與上述接口方法的聲明返回類型不兼容,則代理實例上的方法調用將拋出
ClassCastException
。
Throwable
- 從代理實例上的方法調用拋出的異常。該異常的類型必須能夠分配到在接口方法的
throws
子句中聲明的任一異常類型或未經檢查的異常類型
java.lang.RuntimeException
或
java.lang.Error
。若是此方法拋出通過檢查的異常,該異常不可分配到在接口方法的
throws
子句中聲明的任一異常類型,代理實例的方法調用將拋出包含此方法曾拋出的異常的
UndeclaredThrowableException
。
UndeclaredThrowableException
第一個參數proxy看着太迷惑了。寫代碼根本用不上!!!!ide
寫了一個簡單的接口實現方法:設計
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("代理前執行的操做!"); method.invoke(sub, args); System.out.println("代理後執行的操做!"); return null; }
實際上,根本用不到第一個參數。代理
不知道設計這個方法的人怎麼搞的,api文檔也說得很玄乎,我就直接忽略了。反正也沒用。code
歡迎探討。對象