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");
}
}