美文网首页
JDK动态代理

JDK动态代理

作者: RocWay | 来源:发表于2017-04-21 12:24 被阅读0次
// JDK动态代理接口
public interface InvokationHandler{
  public Object invoke(Object proxy, Mehtod method, Object[] args) throws Throwable; 
}
// DBQuery代理类
public DBQueryProxy implement InvokationHandler{
  private Object target;

  // 动态生成代理类,以及代理类的对象
  public Object bind(Object target){
    this.target = target;
    // 根据目标类的接口,生成代理类,以及代理类实例
    return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
  }
  @Override
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{
    // 丰富目标方法的调用逻辑
    System.out.println("Calling DBQuery");
    return method.invoke(target, args);
  }
}

public class JDKProxyMain{
  public static void main(String[] args){
    DBQuery dbQuery = new DBQuery(); // 代理的目标对象
    DBQueryProxy proxy = new DBQueryProxy(); // 代理对象

    IDBQuery query = (IDBQuery)proxy.bind(dbQuery);  // 动态生成代理类对象
    query.request();  // 该方法最终会调用到代理对象的invoke方法
  }
}

相关文章

网友评论

      本文标题:JDK动态代理

      本文链接:https://www.haomeiwen.com/subject/duldzttx.html