您的位置:首页 > 其它

17

2012-11-17 22:45 92 查看
package com.haizhitao.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<?> classType = obj.getClass();

return Proxy.newProxyInstance(classType.getClassLoader(),
classType.getInterfaces(), new VectorProxy(obj));
}

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());

System.out.println(v.getClass().getName());

v.add("New");
v.add("York");

System.out.println(v);

v.remove(0);
System.out.println(v);
}
}

//output:
//	$Proxy0
//	before calling: public abstract boolean java.util.List.add(java.lang.Object)
//	New
//	after calling: public abstract boolean java.util.List.add(java.lang.Object)
//	before calling: public abstract boolean java.util.List.add(java.lang.Object)
//	York
//	after calling: public abstract boolean java.util.List.add(java.lang.Object)
//	before calling: public java.lang.String java.lang.Object.toString()
//	after calling: public java.lang.String java.lang.Object.toString()
//	[New, York]
//	before calling: public abstract java.lang.Object java.util.List.remove(int)
//	0
//	after calling: public abstract java.lang.Object java.util.List.remove(int)
//	before calling: public java.lang.String java.lang.Object.toString()
//	after calling: public java.lang.String java.lang.Object.toString()
//	[York]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: