(动态代理简而言之,就是对于一个对象,在调用其方法时,能够附加的做些其他操作而产生的。)
package com.ygl.dynamicproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.List;
import java.util.Vector;
public class VectorProxy implements InvocationHandler{
private Object proxyobj;
public VectorProxy(Object obj){
this.proxyobj=obj;
}
//往里面传对象,对象实现什么接口,返回的代理就实现什么接口
public static Object factory(Object obj){
Class<?> clazz=obj.getClass();
return Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(),new VectorProxy(obj));
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("before Calling"+method);
if(null!=args){
for(Object obj:args){
System.out.println(obj);
}
}
Object object=method.invoke(proxyobj, args);
System.out.println("after Calling"+method);
return object;
}
public static void main(String[] args) {
List v=(List) factory(new Vector());
v.add("New");
v.add("HH");
System.out.println(v);
}
}
//*******************************
before Callingpublic abstract boolean java.util.List.add(java.lang.Object)
New
after Callingpublic abstract boolean java.util.List.add(java.lang.Object)
before Callingpublic abstract boolean java.util.List.add(java.lang.Object)
HH
after Callingpublic abstract boolean java.util.List.add(java.lang.Object)
before Callingpublic java.lang.String java.lang.Object.toString()
after Callingpublic java.lang.String java.lang.Object.toString()
[New, HH]