zoukankan      html  css  js  c++  java
  • Proxy说明

    代理类调用:

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    /*
    Proxy与C#中用途有点接近的是委托:都可以给一个方法,实现方法的入常,返回值的修改

    * Proxy代理需要: * 1.有一个接口类。 * 2.有一个实现类。 * 3.需要修改实现类功能,但又不想修改实现类。 * * 实现步骤: * 1.创建代理类 方法:Proxy.newProxyInstance * 参数 实现类实例类加载器、实现类接口加载器、实现类方向修改接口实现new InvocationHandler * 2.重写InvocationHandler接口的invoke方法,方法三个参数 proxy:代理对象、method:调用的方法、args:调用方法参数 * 3.有上面参数,在invoke中,我们就可以通过反射来执行给定的方法。 * * 这样我们就可以实现:修改入参、返回值的目的 * */ public class ProxyTest { public static void main(String[] args) { StudentE stu=new StudentE(); /* 三个参数: 1. 类加载器:真实对象.getClass().getClassLoader() 2. 接口数组:真实对象.getClass().getInterfaces() 3. 处理器:new InvocationHandler() */ Student stuProxy = (Student)Proxy.newProxyInstance(stu.getClass().getClassLoader(), stu.getClass().getInterfaces(), new InvocationHandler() { /* 代理逻辑编写的方法:代理对象调用的所有方法都会触发该方法执行 参数: 1. proxy:代理对象 2. method:代理对象调用的方法,被封装为的对象 3. args:代理对象调用的方法时,传递的实际参数 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if ("study".equals(method.getName())) { double d=((double)args[0])*0.9; String res = (String)method.invoke(stu,d )+",代理抽层了"; System.out.println("车接车送"); return res; } return method.invoke(stu,args); } }); String study = stuProxy.study(1000); System.out.println(study); stuProxy.show(); } }

    接口:

    public interface Student {
        String study(double d);
        void show();
    }

    实现类:

    public class StudentE implements Student {
        @Override
        public String study(double d) {
            System.out.println("学生学习交学费:"+d);
            return "学生学习交学费:"+d;
        }
    
        @Override
        public void show() {
            System.out.println("show");
        }
    }
  • 相关阅读:
    有关TSQL的10个好习惯
    jQuery操作Select
    SQL Server 高性能写入的一些总结
    如何限制文本框只能输入数字,小数点,英文,汉字等各类代码(转载)
    补码、条件跳转指令
    Windows获取进程完整路径
    NumPy库
    WS_窗口风格常量
    C语言核心技术第一章
    Ubuntu安装搜狗输入法
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/13862821.html
Copyright © 2011-2022 走看看