91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java使用反射生成JDK代理示例

發布時間:2020-10-15 05:09:58 來源:腳本之家 閱讀:168 作者:cakincqm 欄目:編程語言

本文實例講述了Java使用反射生成JDK代理。分享給大家供大家參考,具體如下:

一 點睛

1 動態代理

java.lang.reflect包下提供了一個Proxy類和一個InvocationHandler接口,通過使用這個類和接口可以生成JDK動態代理類或動態代理對象。

Proxy 提供用于創建動態代理類和代理對象的靜態方法,它也是所有動態代理類的父類。如果我們在程序中為一個或多個接口動態地生成實現類,就可以使用Proxy來創建的動態代理類;如果需要為一個或多個接口動態地創建實例,也可以使用Proxy來創建動態代理實例。

2 Proxy

Proxy提供了如下兩個方法來創建動態代理類和動態代理實例:

static Class<?> getProxyClass(ClassLoader loader, Class<?>... interfaces):創建一個動態代理類所對應的Class對象,該代理類將實現interfaces所指定的多個接口。第一個ClassLoader指定生成動態代理類的類加載器。

static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces, InvocationHandler  h):直接創建一個動態代理對象,該代理對象的實現類實現了interfaces指定的系列接口,執行代理對象的每個方法時都會被替換執行InvocationHandler對象的invoke方法。

二 實戰

1 代碼

import java.lang.reflect.*;
interface Person
{
  void walk();
  void sayHello(String name);
}
class MyInvokationHandler implements InvocationHandler
{
  /*
  執行動態代理對象的所有方法時,都會被替換成執行如下的invoke方法
  其中:
  proxy:代表動態代理對象
  method:代表正在執行的方法
  args:代表調用目標方法時傳入的實參。
  */
  public Object invoke(Object proxy, Method method, Object[] args)
  {
    System.out.println("----正在執行的方法:" + method);
    if (args != null)
    {
      System.out.println("下面是執行該方法時傳入的實參為:");
      for (Object val : args)
      {
        System.out.println(val);
      }
    }
    else
    {
      System.out.println("調用該方法沒有實參!");
    }
    return null;
  }
}
public class ProxyTest
{
  public static void main(String[] args)
    throws Exception
  {
    // 創建一個InvocationHandler對象
    InvocationHandler handler = new MyInvokationHandler();
    // 使用指定的InvocationHandler來生成一個動態代理對象
    Person p = (Person)Proxy.newProxyInstance(Person.class.getClassLoader()
      , new Class[]{Person.class}, handler);
    // 調用動態代理對象的walk()和sayHello()方法
    p.walk();
    p.sayHello("孫悟空");
  }
}

2 運行

E:\Java\瘋狂java講義\codes\18\18.5>java ProxyTest
----正在執行的方法:public abstract void Person.walk()
調用該方法沒有實參!
----正在執行的方法:public abstract void Person.sayHello(java.lang.String)
下面是執行該方法時傳入的實參為:
孫悟空

更多java相關內容感興趣的讀者可查看本站專題:《Java面向對象程序設計入門與進階教程》、《Java數據結構與算法教程》、《Java操作DOM節點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》

希望本文所述對大家java程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

张家港市| 田东县| 会理县| 怀化市| 合水县| 调兵山市| 五河县| 营口市| 卫辉市| 灵璧县| 武平县| 肥乡县| 元江| 潮州市| 上虞市| 楚雄市| 明溪县| 方城县| 巴楚县| 麻栗坡县| 蕲春县| 元谋县| 芦溪县| 肃南| 察雅县| 南安市| 鄱阳县| 沙湾县| 凌源市| 汾阳市| 平顺县| 依安县| 崇明县| 安仁县| 临沭县| 汶上县| 新巴尔虎右旗| 贵溪市| 凯里市| 淮南市| 任丘市|