代理类具用以下属性:
- 代理类是公共的、最终的,而不是抽象的。
- 未指定代理类的非限定名称。但是,以字符串
"$Proxy"
开头的类名空间应该为代理类保留。 - 代理类扩展
java.lang.reflect.Proxy
。 - 代理类会按同一顺序准确地实现其创建时指定的接口。
- 如果代理类实现了非公共接口,那么它将在与该接口相同的包中定义。否则,代理类的包也是未指定的。注意,包密封将不阻止代理类在运行时在特定包中的成功定义,也不会阻止相同类加载器和带有特定签名的包所定义的类。
- 由于代理类将实现所有在其创建时指定的接口,所以对其
Class
对象调用getInterfaces
将返回一个包含相同接口列表的数组(按其创建时指定的顺序),对其Class
对象调用getMethods
将返回一个包括这些接口中所有方法的Method
对象的数组,并且调用getMethod
将会在代理接口中找到期望的一些方法。 - 如果
Proxy.isProxyClass
方法传递代理类(由Proxy.getProxyClass
返回的类,或由Proxy.newProxyInstance
返回的对象的类),则该方法返回 true,否则返回 false。 - 代理类的
java.security.ProtectionDomain
与由引导类加载器(如java.lang.Object
)加载的系统类相同,原因是代理类的代码由受信任的系统代码生成。此保护域通常被授予java.security.AllPermission
。 - 每个代理类都有一个可以带一个参数(接口
InvocationHandler
的实现)的公共构造方法,用于设置代理实例的调用处理程序。并非必须使用反射 API 才能访问公共构造方法,通过调用Proxy.newInstance
方法(将调用Proxy.getProxyClass
的操作和调用带有调用处理程序的构造方法结合在一起)也可以创建代理实例。
代理实例具有以下属性:
- 提供代理实例
proxy
和一个由其代理类Foo
实现的接口,以下表达式将返回 true:proxy instanceof Foo
ClassCastException
):(Foo) proxy
- 每个代理实例都有一个关联的调用处理程序,它会被传递到其构造方法中。静态
Proxy.getInvocationHandler
方法将返回与作为其参数传递的代理实例相关的调用处理程序。 - 代理实例上的接口方法调用将按照该方法的文档描述进行编码,并被指派到调用处理程序的
Invoke
方法。 - 在代理实例上的
java.lang.Object
中声明的hashCode
、equals
或toString
方法的调用将按照与编码和指派接口方法调用相同的方式进行编码,并被指派到调用处理程序的invoke
方法,如上所述。传递到invoke
的Method
对象的声明类是java.lang.Object
。代理类不重写从java.lang.Object
继承的代理实例的其他公共方法,所以这些方法的调用行为与其对java.lang.Object
实例的操作一样。
在多代理接口中重复的方法
当代理类的两个或多个接口包含一个具有相同名称和参数签名的方法时,代理类的接口顺序变得非常重要。在代理实例上调用重复方法 时,传递到调用处理程序的 Method
对象没有必要成为其声明类可以从接口(通过该接口调用代理方法)的引用类型指派的对象。此限制存在的原因是,生成的代理类中的相应方法实现无法确定它通过哪一个接口调用。因此,在代理实例上调用重复方法时,第一个接口中的方法的 Method
对象包含接口的代理类列表中的方法(直接或通过超级接口继承),该对象会传递到调用处理程序的 invoke
方法,无论该方法调用通过哪一种引用类型发生。
如果代理接口包含某一方法,它的名称和参数签名与 java.lang.Object
的 hashCode
、equals
或 toString
方法相同,那么在代理实例上调用这样的方法时,传递到调用处理程序的 Method
对象将使 java.lang.Object
成为其声明类。换句话说,java.lang.Object
公共的非最终方法理论上在所有代理接口之前,以便确定哪一个 Method
对象传递到调用处理程序。
还要注意,当重复方法被指派到调用处理程序时,invoke
方法只可以抛出经过检查的异常类型,该异常类型可以使用所有 代理接口(可以通过它调用)中方法的 throws
子句指派一种异常类型。如果 invoke
方法抛出一个经过检查的异常,该异常没有指派给任何由一个代理接口(可以通过它调用)中的方法声明的异常类型,那么该代理实例上的调用将抛出一个未经检查的 UndeclaredThrowableException
。此限制表示并非所有的由传递到 invoke
方法的 Method
对象上调用 getExceptionTypes
返回的异常类型都可以由 invoke
方法成功抛出。
相关推荐
代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个...
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类...
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理...
c#课件 c#资料 C# j经典部分 精华部分 类,接口,继承 文件操作 操作符重载 代理 属性 放射 特征 使用线程 异常处理 函数重载 集合 数组 欢迎下载!!
代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个...
论文研究-一类多期委托代理关系的模型研究.pdf, 企业的生产活动是由三大因素组成 :资产、劳动和技术 .本文从企业委托人拥有资产 ,代理人付出劳动 ,技术为中性出发 ,讨论...
代理模式 是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理...
为客户提供接入因特网服务的代理商简称是 ISP 。 6. 利用任何一种通信线路使两台以上的计算机彼此连接并能传输双方共同可以识别的 数据信号的体系称为计算机数据 通信 系统。 7. 集调制/解调两种处理功能于一体的...
是Visual Studio扩展,用于为OData Web服务生成C#或VB客户端代码。 从Visual Studio Community 2019 v...根据OData规范1.0-4.0的OData规范生成C#和VB客户端/代理(客户端代码) 支持在OData协议版本4.0的开放类型上发
从历史上看,这发生在一家公司有意通过依赖代理(例如邮政编码)来代理受保护类的成员的情况下,从而歧视受保护类的成员。 但是,当受保护阶级的成员身份可以预测歧视者的面部中立目标,从而使歧视“合理”时,代理...
6. 代理类木马 木马病毒的危害 如何防御木马病毒? 如何查出木马的一些方法 一、检测网络连接 二、禁用不明服务 三、轻松检查账户 如何删除木马病毒 ? 1、禁用系统还原(Windows Me/XP) 2、将计算机重启到安全...
特征 获取 HTTP/HTTPS 代理 Promise 和 async/await 支持 ES6 类支持 以中高速获取代理 非中国代理 打字稿打字 要求 物品 细节 系统 GNU/Linux (>=2.6.x)、macOS (>=10.10.x)、Windows(晚于 XP) 环境 Node.js >= ...
使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控...
Collections 类集合实现类特征图 泛形 泛型的使用 用泛型表示类 用泛型表示接口泛型方法 泛型通配符 反射 Class 类Field 类Method 类ClassLoader 类 枚举 枚举特性 枚举和普通类-样枚举神秘之处 枚举类 I/O File...
集合实现类特征图 23 泛形 23 反射 24 I/O 24 File 类 24 基础 IO 类和相关⽅法 25 InputStream 25 OutputStream 25 Reader 类 26 Writer 类 26 InputStream 及其⼦类 27 OutputStream 及其⼦类 27 Reader 及其⼦类 ...
为了解决传统匹配算法运行效率低、匹配精度低等问题,在快速特征点提取和描述(ORB)算法的基础上提出一种融合彩色不变量和基于加速稳健特征和对象请求代理(SURB)检测的优化匹配方法。首先,在同一复杂场景下,通过...
学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...
特征实例上的私有和受保护成员,即使使用代理包装也是如此。 经典构造函数上的私有静态成员和受保护的静态成员。 静态构造函数。 原型可修改的字段初始化。 抽象和最终课程。 支持HTML自定义元素。 可定位的super...
使用Java代理覆盖标准JRE类,以允许在任何Java应用程序上进行密集调试。 特征: 转储传递给JVM的每个Classfile。 阻止所有JVM出口。 阻止所有Runtime.exec调用。 阻止流程构建器。 阻止awt.Robot。 重写以防止...
自行构建web网站(敏感请求包括:注册、登录、详情、支付等),使用Nginx实现反向代理,负载均衡,并统一日志格式。模拟慢连接、DDOS、撞库、爆破等恶意攻击并统一数据格式,Logstash过滤收集有效日志,日志分类归档...