考察点:动态代理流程
Java实现动态代理的大致步骤如下:
1.定义一个委托类和公共接口。
2.自己定义一个类(调用处理器类,即实现 InvocationHandler 接口),这个类的目的是指定运行时将生成的代理类需要完成的具体任务(包括Preprocess和Postprocess),即代理类调用任何方法都会经过这个调用处理器类(在本文最后一节对此进行解释)。
3.生成代理对象(当然也会生成代理类),需要为他指定(1)委托对象(2)实现的一系列接口(3)调用处理器类的实例。因此可以看出一个代理对象对应一个委托对象,对应一个调用处理器实例。
4.Java 实现动态代理主要涉及以下几个类:
①java.lang.reflect.Proxy: 这是生成代理类的主类,通过 Proxy 类生成的代理类都继承了 Proxy 类,即 DynamicProxyClass extends Proxy。
②java.lang.reflect.InvocationHandler: 这里称他为"调用处理器",他是一个接口,我们动态生成的代理类需要完成的具体内容需要自己定义一个类,而这个类必须实现 InvocationHandler 接口。
示例代码:
`public` `final` `class` `$Proxy1 ``extends` `Proxy ``implements` `Subject{``private` `InvocationHandler h;``private` `$Proxy1(){}``public` `$Proxy1(InvocationHandler h){``this``.h = h; }``public` `int` `request(``int` `i){``Method method = Subject.``class``.getMethod(``"request"``, ``new` `Class[]{``int``.``class``}); ``//创建method对象``return` `(Integer)h.invoke(``this``, method, ``new` `Object[]{``new` `Integer(i)}); ``//调用了invoke方法 } }`



