JDK动态代理

// 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动态代理)