一個簡單JDK動態代理的實例

動態代理的步驟:

  1. 建立一個實現了InvocationHandler接口的類,必須重寫接口裏的invoke()方法。
  2. 建立被代理的類和接口
  3. 經過Proxy的靜態方法 newProxyInsatance(ClassLoader loader,Class[] interfaces,InvocationHandler,handler)來建立一個代理
  4. 經過代理來調用方法

簡單的動態代理實例

package com.sean.zzzjvm; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * * @Author Sean * @Date 2017/8/20 21:43. * @Version */ public class DynamicProxyTest { //定義一個接口 interface IHello{ void sayHello(); } //實現該接口的類 static class Hello implements IHello{ @Override public void sayHello() { System.out.println("hello world"); } } //建立一個動態代理類,實現InvocationHandler接口 static class DynamicProxy implements InvocationHandler{ Object originalObj; //建立一個代理的方法,在new DynamicProxy().bind(new Hello());執行 Object bind (Object originalObj){ this.originalObj = originalObj; //返回一個代理對象 return Proxy.newProxyInstance(originalObj.getClass().getClassLoader(), originalObj.getClass().getInterfaces(),this); } //默認重寫的方法,在 hello.sayHello()執行 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("welcome"); return method.invoke(originalObj,args); } } public static void main(String[] args){ // IHello hello = new Hello(); //調用動態代理的方法 IHello hello = (IHello) new DynamicProxy().bind(new Hello()); hello.sayHello(); } }
相關文章
相關標籤/搜索