当前位置: 首页 > 面试题库 >

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

逑禄
2023-03-14
本文向大家介绍 介绍一下 如何实现动态代理?相关面试题,主要包含被问及 介绍一下 如何实现动态代理?时的应答技巧和注意事项,需要的朋友参考一下

考察点:动态代理流程

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

 

 类似资料:
  • JavaScript JavaScript 是网络上最常用也是支持者最多的客户端脚本语言。它可以收集 用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页游戏。 我们可以在网页源代码的标签里看到,比如: <script type="text/javascript" src="https://statics.huxiu.com/w/mini/static_2015/js/s

  • 本文向大家介绍Java 动态代理与CGLIB详细介绍,包括了Java 动态代理与CGLIB详细介绍的使用技巧和注意事项,需要的朋友参考一下 静态代理模式 因为需要对一些函数进行二次处理,或是某些函数不让外界知道时,可以使用代理模式,通过访问第三方,间接访问原函数的方式,达到以上目的。 1.1 静态代理的弊端 如果要想为多个类进行代理,则需要建立多个代理类,维护难度加大。 仔细想想,为什么静态代理会

  • 本文向大家介绍介绍一下auc?相关面试题,主要包含被问及介绍一下auc?时的应答技巧和注意事项,需要的朋友参考一下 介绍auc,那么就介绍ROC,auc反映的是从样本集中抽出样本,预测这个样本是正例的概率比预测这个样本是反例的概率大的概率,做法是由于每种样本出现的概率已知,将其由小到大进行排序,依次作为截断概率,小于该概率预测为负例,大于该概率预测为正例,这样每个样本都有一个预测值,可以计算出样本

  • 本文向大家介绍CycleGAN 原理介绍一下相关面试题,主要包含被问及CycleGAN 原理介绍一下时的应答技巧和注意事项,需要的朋友参考一下 参考回答: CycleGAN其实就是一个A→B单向GAN加上一个B→A单向GAN。两个GAN共享两个生成器,然后各自带一个判别器,所以加起来总共有两个判别器和两个生成器。一个单向GAN有两个loss,而CycleGAN加起来总共有四个loss。CycleG

  • 本文向大家介绍Focal Loss 介绍一下相关面试题,主要包含被问及Focal Loss 介绍一下时的应答技巧和注意事项,需要的朋友参考一下 参考回答: Focal loss主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,也可理解为一种困难样本挖掘。 损失函数形式:Focal loss是在交叉熵损失函数基础上进行的修改,首先

  • 本文向大家介绍介绍一下Python 锁?相关面试题,主要包含被问及介绍一下Python 锁?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: Python中的各种锁: 一、全局解释器锁(GIL) 1、什么是全局解释器锁 每个CPU在同一时间只能执行一个线程,那么其他的线程就必须等待该线程的全局解释器,使用权消失后才能使用全局解释器,即使多个线程直接不会相互影响在同一个进程下也只有一个线程使用