动态代理类

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");
    }
}
原文地址:https://www.cnblogs.com/shaoshao/p/3113678.html