1. 程式人生 > 程式設計 >Java簡單實現動態代理模式過程解析

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方法執行後

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。