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");
        }
    }
  • 相关阅读:
    数组元素循环右移
    备忘录模式笔记
    调度算法(笔记)
    meta http-equiv的用法(转)
    常用Maven插件介绍(下)(转)
    常用Maven插件介绍(上)(转)
    maven命令
    JDK并发包
    线程基础
    Jav堆排序
  • 原文地址:https://www.cnblogs.com/shaoshao/p/3113678.html
Copyright © 2011-2022 走看看