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方法
  }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容