黑马程序员技术交流社区

标题: 动态代理 [打印本页]

作者: j816326    时间: 2013-7-1 20:21
标题: 动态代理
本帖最后由 孙百鑫 于 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这个方法到底怎么理解
复制代码

作者: j816326    时间: 2013-7-1 21:51
大神们都到哪去了
作者: 禾呈    时间: 2013-7-2 09:40
Subject pro = (Subject)Proxy.newProxyInstance(classType.getClassLoader(),realSubject.getClass().getInterfaces(),handler);
这几话返回的但是一个实现 Subject接口的Object对象所以可以强转为 subject类型

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




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