“`” 考察点:动态代理流程

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方法 } }`

 

            "```

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.