栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

介绍一下 如何实现动态代理?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

介绍一下 如何实现动态代理?

考察点:动态代理流程

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

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/363581.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号