zoukankan      html  css  js  c++  java
  • 动态代理类

    package com.fanShe;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    /**
     * 动态代理类: 
     * 我的理解是: 可以把多个接口中的 方法 统一用 类 的形式管理和使用
     * @param args
     */
    interface Persons{
        void walk();
        void sayHello(String name);
    }
    
    //相当一个中介 动态代理类 中 接口的方法, 都要靠这个接口中的invoke来实现
    class MyInvokationHandler implements InvocationHandler{
    
        /*
         * 三个参数的理解
         * prox:代表 动态代理对象
         * method: 代表 正在执行的方法
         * args: 代表 调用method方法时传入的实参
         */
        public Object invoke(Object proxy,Method method, Object[] args){
            System.out.println("--正在执行的方法: "+method);
            if(args !=null){
                System.out.println("下面是执行该方法时传来的实参为: ");
                for(Object val : args){
                    System.out.println(val);
                }
            }else {
                System.out.println("调用该方法没有实参!");
            }
            return null;
        }
    }
    public class ProxyTest {
    
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            InvocationHandler handler = new MyInvokationHandler();
            /*Proxy :提供创建动态代理类的静态方法
             * 
             * Proxy.newProxyInstance(loader, interfaces, h)
             * 该方法 创建接口的一个实例
             * loader: 类加载器
             * interface: 接口的class 对象
             * h: InvocationHandler 的一个实例
             */
            Persons p =(Persons)Proxy.newProxyInstance(Persons.class.getClassLoader(), new Class[]{Persons.class}, handler);
            p.walk();
            
            p.sayHello("shaoshao");
        }
    }
  • 相关阅读:
    致敬我的2015
    葡萄城报表-导出输出
    葡萄城报表-内网发布
    葡萄城报表-核心代码展示
    点滴积累--工作总结
    解决WPF中ListViewItem对齐问题
    IIS上传文件失败
    HTTP 错误 404.4
    端口及IP复习
    请考虑将 "await" 运算符应用于调用结果
  • 原文地址:https://www.cnblogs.com/shaoshao/p/3113678.html
Copyright © 2011-2022 走看看