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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© j816326 中级黑马   /  2013-7-1 20:21  /  1200 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-7-2 10:17 编辑
  1. public interface Subject{        
  2. public void request()
  3. ;}
  4. public class RealSubject implements Subject{        
  5. public void request()        {        
  6.         System.out.println("From real subject");        
  7. }
  8. }
  9. public class DynamicSubject implements InvocationHandler{
  10.         private Object sub;        
  11. public DynamicSubject(Object sub)        {        
  12.         this.sub = sub;        
  13. }        
  14. public Object invoke(Object proxy, Method method, Object[] args)        
  15.                 throws Throwable        {        
  16.         method.invoke(sub,args);        
  17.         return null;        
  18. }
  19. }
  20. public class Client{
  21.         public static void main(String[] args)        {        
  22.         RealSubject realSubject = new RealSubject();               
  23.        InvocationHandler handler = new DynamicSubject(realSubject);        
  24.         Class<?> classType = handler.getClass();        
  25.         Subject pro = (Subject)Proxy.newProxyInstance(
  26.                                    classType.getClassLoader(),               
  27.                 realSubject.getClass().getInterfaces(),handler);        
  28.                            pro.request();
  29.         }
  30. }
  31. 我的问题是:Subject pro = (Subject)Proxy.newProxyInstance(classType.getClassLoader(),realSubject.getClass().getInterfaces(),handler);这行代码返回的到底是个什么?就是Subject类型?还是强制转换了?为什么执行pro.request();之后会调用DynamicSubject类里面的那个method.invoke方法 Invocation这个接口和Proxy.newProxyInstance这个方法到底怎么理解
复制代码

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
大神们都到哪去了
回复 使用道具 举报
Subject pro = (Subject)Proxy.newProxyInstance(classType.getClassLoader(),realSubject.getClass().getInterfaces(),handler);
这几话返回的但是一个实现 Subject接口的Object对象所以可以强转为 subject类型

pro的方法可以这样理解
方法A(参数){
handler.invoke(当前代理类对象,所要调用的方法A,参数);
}

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马