//假设做一个ArrayList 的 添加提示的功能。 就是 在调用它的add方法的时候 输出一句 请检查类型.
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.*;
import java.util.*;
class ArrayListProxy implements InvocationHandler...{
Object list ;
ArrayListProxy(Object list )...{
this.list = list;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable...{
if(method.getName().equals("add"))...{
//对特定方法代理
System.out.println ("请检查类型.......befor:"+method.getName());
}
//对所有方法代理
//System.out.println ("请检查类型.......befor:"+method.getName());
Object o = method.invoke(list,args);
return o ;
}
public static Object factory(Object o )...{
Class c = o.getClass();
//用真实的对象来构造代理对象
return Proxy.newProxyInstance(c.getClassLoader(),c.getInterfaces(),new ArrayListProxy(o));
}
}
class TestDProxy...{
public static void main(String[] args)...{
ArrayList al = new ArrayList();
List pro = (List)ArrayListProxy.factory(al);
pro.add("aaa");
System.out.println (pro.size());
}
}
|