package dynamic;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynamicProxy {
interface IHello{
public void sayHell();
}
// 委托类
static class Hello implements IHello{
@Override
public void sayHell() {
System.out.println("Hello world");
}
}
//代理类
static class DynamicProxyDemo implements InvocationHandler{
private Object object;
/**
* 绑定到代理对象上
* @param object
* @return
*/
public Object bind(Object object){
//取得代理对象
this.object = object;
/**
* 参数说明:
ClassLoader loader:类加载器
Class<?>[] interfaces:得到全部的接口
InvocationHandler h:得到InvocationHandler接口的子类实例
*/
return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
}
/**
* 参数说明:
Object proxy:指被代理的对象。
Method method:要调用的方法
Object[] args:方法调用时所需要的参数
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("welcome");
return method.invoke(object, args);
}
}
public static void main(String[] args) {
IHello hello = (IHello)new DynamicProxyDemo().bind(new Hello());
hello.sayHell();
}
}