zoukankan      html  css  js  c++  java
  • java动态代理的实现

    1.首先定义一个委托类的接口Subject,应该必须是接口,而不能是抽象类。因为Proxy.newProxyInstance方法的第二个参数需要委托类实现的接口。
    public static Object newProxyInstance(ClassLoader loader,
    Class<?>[] interfaces,
    InvocationHandler h)
    第一个参数是代理类的类加载器
    第三个参数是指明产生的代理类所做的事情,代理对象调用的任何方法都会调用 InvocationHandler 的 invoke() 方法的
    2.具体委托类Connection实现Subject接口
    3.代理类ConnectionProxy
    package com.huyanxia.designModel;
    import java.lang.reflect.*;
    import java.lang.reflect.Proxy;

    /**
    * Created by huyanxia on 2017/8/8.
    */
    interface Subject{
    void query();
    }
    class Connection implements Subject{
    public void query(){
    System.out.println("查询");
    }
    }
    class ConnectionProxy{
    public Subject getProxy(){
    //持有具体委托类的一个对象
    Connection c = new Connection();
    //返回代理对象
    return (Subject) Proxy.newProxyInstance(ConnectionProxy.class.getClassLoader(), c.getClass().getInterfaces(), new InvocationHandler(){
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    if(method.getName()=="query"){
    return method.invoke(c,args);
    }
    return null;
    }
    });
    }
    }
    public class ProxyHandler {
    public static void main(String[] args) {
    ConnectionProxy cp = new ConnectionProxy();
    cp.getProxy().query();
    }
    }
  • 相关阅读:
    名字匹配(水题)
    奇怪的键盘
    杰杰的键盘
    Windows Message Queue(优先队列)
    筛法求素数
    会场安排问题(贪心)
    Sail
    Elevator
    Lowest Bit
    File Searching
  • 原文地址:https://www.cnblogs.com/zhima-hu/p/7326209.html
Copyright © 2011-2022 走看看