黑马程序员技术交流社区
标题:
动态代理类为什么要实现接口?
[打印本页]
作者:
乔玉吉
时间:
2012-6-1 01:03
标题:
动态代理类为什么要实现接口?
生成动态代理类为什么要实现一个或多个接口?
作者:
凡延海
时间:
2012-6-1 09:11
动态代理类是java虚拟机自动创建的,这需要给虚拟机传递接口,让虚拟机知道自己要创建的是什么动态类。在程序中要让虚拟机创建动态代理类一般调用方法:static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) Class<?>[] interfaces参数就是表示接口的Class数组, ClassLoader loader就是接口的类加载器,方法呢返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序 。
例如:
private static Object getProxy(final Object target,final Advice advice)
{
Object proxy3=Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler(){
public Object invoke(Object proxy, Method method,Object[] args)throws Throwable
{
advice.beformethod();
Object retVal=method.invoke(target, args);
advice.aftermethod();
return retVal;
}
});
return proxy3;
}
复制代码
这个方法的target就是需要的代理的接口,advice就是需要给接口中的方法添加的系统功能的实例对象。动态代理类有系统自动生成方便了我们对方法的功能的增强,满足我们的需求,很实用。
作者:
杜俊彪
时间:
2012-6-1 09:17
因为代理类与被代理类有着相同的方法或属性; 例如:红酒厂商和红酒代理商,他们都有相同的方法就是“ 卖红酒 “ ; 至于他们想怎么卖, 接口就就发挥了很大作用,他们只要实现接口并复写”卖红酒“这方法;
作者:
于清云
时间:
2012-6-1 14:17
同学,抽象类强制让你具备一些基本功能。
接口作用是想让你添加一些附加功能。
动态代理类之所以要实现多接口,为的是多添加些附加功能。
还是打个比方吧:
你想委托我回答你这个问题,我实现了喝水的接口,所以我一边喝水一边回答你的问题了。呵呵。
明白了不。
作者:
乔玉吉
时间:
2012-6-2 23:13
凡延海 发表于 2012-6-1 09:11
动态代理类是java虚拟机自动创建的,这需要给虚拟机传递接口,让虚拟机知道自己要创建的是什么动态类。在程 ...
在论坛如何发你那种样式的代码
作者:
闾丘日月
时间:
2012-6-3 04:27
我的理解是java标准这么定的而已
你不实现接口不是还可以用第三方的包么
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2