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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zZZ~~ 中级黑马   /  2013-6-3 20:35  /  1459 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zZZ~~ 于 2013-6-3 20:37 编辑

1、动态代理中,invoke方法是干什么用的?为什么定义了,却没看到哪调用它?
2、public class MyProxyFactory{        //为指定target生成动态代理对象      
  public static Object getProxy(Object target)              
  throws Exception        {               
//创建一个MyInvokationHandler对象               
MyInvokationHandler handler =                         new MyInvokationHandler();               
//为MyInvokationHandler设置target对象               
handler.setTarget(target);              
  //创建、并返回一个动态代理            
   return Proxy.newProxyInstance(target.getClass().getClassLoader()                    
    , target.getClass().getInterfaces(), handler);        }
}
看别人的例子,有的将上面单独写成类,有的拆开放到别的地方,哪种方式更好?或者说各自有什么优缺点?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
1、类似于反射中的invoke,功能底层调用代理功能以及原目标对象指定方法。当然这都是自己定义的,想怎么写就怎么写。我们在进行创建代理对象时Proxy.newProxyInstance(target.getClass().getClassLoader() , target.getClass().getInterfaces(), handler); newProxyInstance会调用handler.invoke() 。具体怎么实现调用的你得去看java底层源码。
2、public class MyProxyFactory{        //为指定target生成动态代理对象 ?
     因为我们在创建代理对象时,需要调用原目标对象指定方法,所以必须得有目标对象。否则怎么知道该代理类是哪个类的代理类,newProxyInstance(target.getClass().getClassLoader() , target.getClass().getInterfaces(), handler); 这个方法明确说明了必须有加载目标类的类加载器以及该目标类的所有实现接口。
3、应该是用匿名内部类来实现方便些。这个不知道

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
yufeng47 发表于 2013-6-6 20:28
1、类似于反射中的invoke,功能底层调用代理功能以及原目标对象指定方法。当然这都是自己定义的,想怎么写 ...

忘记给你分了
回复 使用道具 举报
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}
回复 使用道具 举报

这个没啥    答题也是给自己长记性
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马