黑马程序员技术交流社区

标题: 关于java动态代理请教大家 [打印本页]

作者: zZZ~~    时间: 2013-6-3 20:35
标题: 关于java动态代理请教大家
本帖最后由 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);        }
}
看别人的例子,有的将上面单独写成类,有的拆开放到别的地方,哪种方式更好?或者说各自有什么优缺点?

作者: yufeng47    时间: 2013-6-6 20:28
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、应该是用匿名内部类来实现方便些。这个不知道
作者: 袁梦希    时间: 2013-6-9 15:24
yufeng47 发表于 2013-6-6 20:28
1、类似于反射中的invoke,功能底层调用代理功能以及原目标对象指定方法。当然这都是自己定义的,想怎么写 ...

忘记给你分了
作者: 袁梦希    时间: 2013-6-9 15:24
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}
作者: yufeng47    时间: 2013-6-9 16:16
袁梦希 发表于 2013-6-9 15:24
忘记给你分了

这个没啥    答题也是给自己长记性




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2