Java簡單實現動態代理模式過程解析
阿新 • • 發佈:2020-07-17
基本知識: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方法執行後
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。