講師回答 / David
您好:handler類中public Object invoke(Object proxy, Method method, Object[] args)...方法,我們使用“method.invoke(target);”而非使用“method.invoke(proxy);”是通過反射的機制調用目標對象的方法。視頻中模擬JDk動態代理,所以講proxy也作為入參,雖然沒有使用到proxy,并不意味著JDK動態代理它沒有被使用到,有興趣可以研究一下源碼內容。
2015-02-11
已采納回答 / David
1、這句話的意思是通過方法的反射,得到Moveable類的某個方法;2、根據API中的定義,Class.getSimpleName()方法是獲取源代碼中給出的‘底層類’簡稱 (Moveable)而Class.getName();以String的形式,返回Class對象的‘實體’名稱 (com.imooc.proxy.Moveable)
2015-01-27
已采納回答 / David
您好:??????? 我們在課程中介紹到了靜態代理,講解他的不足:會使我們系統內的類的規模增大(類膨脹),并且不易維護;并且由于被代理類和代理類的功能 本質上是相同的,被代理類只是起到了中介的作用,這種代理在系統中的存在,導致系統結構比較臃腫和松散。?????? 為了解決這個問題,所以要動態地創建Proxy:在運行狀態中,需要代理的地方,動態地創建一個Proxy,用完之后,就會銷毀,這樣就可以避免了Proxy 角色的class在系統中冗雜的問題了。?????? 至于視頻中演示動態代理的產生(生成java文...
2014-12-19
已采納回答 / David
?您好,很高興收到你的問題,解答如下:JDK動態代理只能代理實現了接口的類,不是這個類(比如Car,實現Moveable接口)需要實現InvocationHandler,而是他的處理器(LogHandler)需要實現InvocationHandler接口。JDK動態代理它是在運行時生成的class,在生成它時你必須提供一組interface給它,然后該class就宣稱它實現了這些 interface。你當然可以把該class的實例當作這些interface中的任何一個來用。當然,這個Dynamic Pro...
2014-12-16
已采納回答 / David
我們看一下示例中的代碼:/**? * 攔截所有目標類方法的調用? * obj? 目標類的實例? * m?? 目標方法的反射對象? * args? 方法的參數? * proxy代理類的實例? */?@Override?public Object intercept(Object obj, Method m, Object[] args,???MethodProxy proxy) throws Throwable {??System.out.println("日志開始...");??//代理類調用父類的方法?...
2014-12-16