黑马程序员技术交流社区

标题: 动态代理类为什么要实现接口? [打印本页]

作者: 乔玉吉    时间: 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就是接口的类加载器,方法呢返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序 。
例如:
  1. private static Object getProxy(final Object target,final Advice advice)
  2.         {
  3.                   Object proxy3=Proxy.newProxyInstance(target.getClass().getClassLoader(),
  4.                                   target.getClass().getInterfaces(),
  5.                                   new InvocationHandler(){
  6.                           public Object invoke(Object proxy, Method method,Object[] args)throws Throwable
  7.                           {
  8.                                  
  9.                                   advice.beformethod();
  10.                                   Object retVal=method.invoke(target, args);
  11.                                   advice.aftermethod();
  12.                                   return retVal;
  13.                           }
  14.                   });
  15.                  return proxy3;
  16.         }
复制代码
这个方法的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