package com.dynamic;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Array;
import java.util.ArrayList;
import java.util.List;

public class TestHandler implements InvocationHandler {
private Object proxiedObj;
public TestHandler(Object obj){
proxiedObj = obj;
}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("1");
Object obj = method.invoke(proxiedObj, args);
System.out.println("2");
return obj;
}

public static void main(String args[]){
Hello hello = new Hello();
Class helloClass = hello.getClass();
IHello hello2 =(IHello)Proxy.newProxyInstance(helloClass.getClassLoader(),helloClass.getInterfaces(),new TestHandler(hello));
hello2.sayHello();//在代理对象上调用方法时这些方法的调用会转变成对调用处理器的invoke方法的调用
}
}
interface IHello{
void sayHello();
}
class Hello implements IHello{
public void sayHello(){
System.out.println("hello world!");
}
}

 


public static ​​Object​​ newProxyInstance(​​ClassLoader​​ loader, ​​Class​​<?>[] interfaces, ​​InvocationHandler​​ h) throws ​​IllegalArgumentException​​


     参数:

​loader​​ - 定义代理类的类加载器

​interfaces​​ - 代理类要实现的接口列表

​h​​ - 指派方法调用的调用处理程序