• 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");
        }
    }
  • 相关阅读:
    MagicAjax.NET Framework
    实例说明sql优化的重要性
    求助:谁可以给我点share point 开发的资料
    整理了一些tsql技巧(收藏)
    熟悉/了解C#基础问题
    .NET在SQL Server中的图片存取技术(例子在管理里InOutImg)
    SQL Server 2000 函数使用CAST 和 CONVERT
    MagicAjax.NET Framework configuration
    找工作了,希望各位多多帮忙
    OSG节点访问和遍历
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/13862821.html
Copyright © 2020-2023  润新知