A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔玉吉 中级黑马   /  2012-6-1 01:03  /  3189 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

生成动态代理类为什么要实现一个或多个接口?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

6 个回复

倒序浏览
动态代理类是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就是需要给接口中的方法添加的系统功能的实例对象。动态代理类有系统自动生成方便了我们对方法的功能的增强,满足我们的需求,很实用。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
因为代理类与被代理类有着相同的方法或属性;  例如:红酒厂商和红酒代理商,他们都有相同的方法就是“   卖红酒 “  ; 至于他们想怎么卖,  接口就就发挥了很大作用,他们只要实现接口并复写”卖红酒“这方法;

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
同学,抽象类强制让你具备一些基本功能。
接口作用是想让你添加一些附加功能。
动态代理类之所以要实现多接口,为的是多添加些附加功能。
还是打个比方吧:
你想委托我回答你这个问题,我实现了喝水的接口,所以我一边喝水一边回答你的问题了。呵呵。
明白了不。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
凡延海 发表于 2012-6-1 09:11
动态代理类是java虚拟机自动创建的,这需要给虚拟机传递接口,让虚拟机知道自己要创建的是什么动态类。在程 ...

在论坛如何发你那种样式的代码
回复 使用道具 举报
我的理解是java标准这么定的而已
你不实现接口不是还可以用第三方的包么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马