溫馨提示×

溫馨提示×

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

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

Java如何實現動態代理模式

發布時間:2020-07-17 16:57:08 來源:億速云 閱讀:526 作者:小豬 欄目:開發技術

小編這次要給大家分享的是Java如何實現動態代理模式,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

基本知識:JDK動態代理是java.lang.reflect.*包提供的方式,它必須借助一個接口才能生成代理對象.

步驟:

1、首先建一個接口類,并提供一個實現類:

public interface ISubject {

  public int add(int a, int b);
}
public class Subject implements ISubject {
  @Override
  public int add(int a, int b) {
    return a + b;
  }
}

2、創建一個代理類,必須要實現InvocationHandler類

public class JdkProxy implements InvocationHandler {

  public Object target;

  public JdkProxy(Object target) {
    this.target = target;
  }

  //第一個是類加載器,采用了target本身的類加載器
  //第二個是把生成的動態代理對象下掛在哪些接口下面,該寫法就是將生成的代理對象放在target真實對象所實現的所有接口下.Subject對象的接口顯然是ISubject,代理對象可以這樣聲明:ISubject proxy =xxxx;
  //第三個是定義實現方法邏輯的代理類,this表示當前對象,它`必須實現InvocationHandler接口的invoke方法,它就是代理邏輯方法.
  public Object getInstance() {
    Object o = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    return o;
  }


  //proxy:代理對象,就是getInstance方法生成的對象
  //method,當前調度的方法
  //args:調度方法的參數
  @Override
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    System.out.println(method.getName() + "方法執行前");
    Object object = method.invoke(target, args);
    System.out.println(object);
    System.out.println(method.getName() + "方法執行后");
    return object;
  }
}

3、測試類

public class ProxyTest {

  public static void main(String[] args) {
    Subject subject = new Subject();
    JdkProxy jdk = new JdkProxy(subject);
    ISubject proxy = (ISubject) jdk.getInstance();
    proxy.add(2, 3);
  }
}

結果:

add方法執行前
5
add方法執行后

看完這篇關于Java如何實現動態代理模式的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女