黑马程序员技术交流社区
标题:
关于代理类。
[打印本页]
作者:
雷楚光
时间:
2012-2-27 16:41
标题:
关于代理类。
为什么我Class proxycClass=Proxy.getProxyClass(ArrayList.class.getClassLoader(), ArrayList.class);
System.out.println(proxycClass);
不能对它进行直接代理 ,提示说不是一个接口。
只有接口才能实现代理吗?
作者:
tanlei200620
时间:
2012-2-27 17:01
你的代码不完整,无法知道具体什么错误,参考下面代码:
package hh;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;
class Hello {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
List<Object> proxy1 = new ArrayList<Object>();
List<Object> proxy = (List<Object>) Hello.getProxy(proxy1);
proxy.add("helen");
proxy.add("never");
proxy.add("for");
proxy.remove(1);
System.out.println(proxy);
}
private static Object getProxy(final Object target) {
class myInvocationHandler implements InvocationHandler {
private Object obj;
myInvocationHandler(Object obj) {
this.obj = obj;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
long beginTime = System.currentTimeMillis();
Object ret = method.invoke(obj, args);
long endTime = System.currentTimeMillis();
System.out.println(method.getName() + "运行时间"
+ (endTime - beginTime));
return ret;
}
}
Object proxy = Proxy.newProxyInstance(target.getClass()
.getClassLoader(), new Class[] { List.class },
new myInvocationHandler(target));
return proxy;
}
}
作者:
雷楚光
时间:
2012-2-27 17:08
list 还是接口 要是你用 ArrayList他就不行了 代理为什么必须用接口类
作者:
tanlei200620
时间:
2012-2-27 17:09
补充一点,java的Proxy只能对接口进行动态代理,但是 可以使用CGLIB包 来实现对类的动态代理。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2