黑马程序员技术交流社区

标题: 代理反射的问题 [打印本页]

作者: 零敢    时间: 2014-1-7 16:41
标题: 代理反射的问题
这是网下下载的一个视频教程中的一个例子:jdk的文档看不懂
public interface Subject
{
        public void request();
}

public class RealSubject implements Subject
{
        public void request()
        {
                System.out.println("From real subject");
        }
}

public class DynamicSubject implements InvocationHandler
{
        private Object sub;
        public DynamicSubject(Object sub)
        {
                this.sub = sub;
        }
        public Object invoke(Object proxy, Method method, Object[] args)
                        throws Throwable
        {
                method.invoke(sub,args);
                return null;
        }
}

public class Client
{
        public static void main(String[] args)
        {
                RealSubject realSubject = new RealSubject();
                InvocationHandler handler = new DynamicSubject(realSubject);
                Class<?> classType = handler.getClass();
                Subject pro = (Subject)Proxy.newProxyInstance(classType.getClassLoader(),
                                realSubject.getClass().getInterfaces(),handler);
                pro.request();
        }
}
我的问题是:Subject pro = (Subject)Proxy.newProxyInstance(classType.getClassLoader(),realSubject.getClass().getInterfaces(),handler);
这行代码返回的到底是个什么?就是Subject类型?还是强制转换了?为什么执行
pro.request();之后会调用DynamicSubject类里面的那个method.invoke方法Invocation这个接口和Proxy.newProxyInstance这个方法到底怎么理解

作者: 渐渐不懂了    时间: 2014-1-9 13:33
本帖最后由 渐渐不懂了 于 2014-1-9 13:42 编辑

Subject pro = (Subject)Proxy.newProxyInstance(classType.getClassLoader(),realSubject.getClass().getInterfaces(),handler);
classType.getClassLoader()表示用的那个类加载器;realSubject.getClass().getInterfaces()表示实现了那个接口;handler需要接受一个new InvocationHandler();中需要接受三个参数,那个类型.class,那个类型的方法,以及参数并且里面有一个invkoe()方法但你用该方法时它就没人调用invoke()函数;
oxy.newProxyInstance()属于Object类型所以需要强制转换;
希望可你帮到你





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