final类是否可以被代理_Java 动态代理机制分析及扩展,第 2 部分
本文希望将 Java 动态代理机制从接口扩展到类,使得类能够享有与接口类似的动态代理支持。
设计及特点
新扩展的类名为 ProxyEx,将直接继承于 java.lang.reflect.Proxy,也声明了与原 Proxy 类中同名的 public 静态方法,目的是保持与原代理机制在使用方法上的完全一致。
图 1. ProxyEx 类继承图
与原代理机制最大的区别在于,动态生成的代理类将不再从 Proxy 类继承,改而继承需被代理的类。由于 Java 的单继承原则,扩展代理机制所支持的类数目不得多于一个,但它可以声明实现若干接口。包管理的机制与原来相似,不支持一个以上的类和接口同时为非 public;如果仅有一个非 public 的类或接口,假设其包为 PackageA,则动态生成的代理类将位于包 PackageA;否则将位于被代理的类所在的包。生成的代理类也被赋予 final 和 public 访问属性,且其命名规则类似地为“父类名 +ProxyN”(N 也是递增的阿拉伯数字)。最后,在异常处理方面则与原来保持完全一致。
图 2. 动态生成的代理类的继承图
模板
通过对 Java 动态代理机制的推演,我们已经获得了一个通用的方法模板。可以预期的是,通过模板来定制和引导代理类的代码生成,是比较可行的方法。我们将主要使用两个模板:类模板和方法模板。
清单 1. 类模板
package &Package;
final public class &Name &Extends &Implements
{
private java.lang.reflect.InvocationHandler handler = null;
&Constructors
&Methods
}
类模板定制了代理类的代码框架。其中带“&”前缀的标签位被用来引导相应的代码替换。在此预留了包(&Package)、类名(&ClassName)、类继承(&Extends)、接口实现(&Implements)、构造函数集(&Constructors)及方法集(&Methods)的标签位。类模板还同时声明了一个私有型的调用处理器对象作为类成员。
清单 2. 方法模板
&Modifiers &ReturnType &MethodName(&Parameters) &Throwables
{
java.lang.reflect.Method method = null;
try {
method = &Class.getMethod( "& MethodName
final类是否可以被代理_Java 动态代理机制分析及扩展,第 2 部分相关推荐
- java动态代理_Java动态代理
java动态代理 代理是一种设计模式. 当我们想添加或修改现有类的某些功能时,我们创建并使用代理对象. 使用代理对象而不是原始对象. 通常,代理对象具有与原始对象相同的方法,并且在Java代理类中,通 ...
- java动态代理_Java 动态代理 原理解析
示例 需要代理的接口 public interface IHello {public void sayHello(); } 需要代理的类 public class HelloImpl implemen ...
- java动态代理_Java 动态代理和依赖注入
[注]本文译自:https://psamsotha.github.io/jersey/2015/12/16/dynamic-proxies-dependency-injection.html 本文将讨 ...
- 【设计模式】代理模式 ( 动态代理 | 模拟 Java 虚拟机生成对应的 代理对象 类 )
文章目录 前言 一.模拟 JVM 生成对应的 代理对象 二.模拟 JVM 生成对应的 代理对象 完整流程展示 1.目标对象接口 2.被代理对象 3.调用处理程序 4.模拟 JVM 生成的代理对象类 5 ...
- Java、Android静态代理与动态代理
代理 (1) 什么是代理? 大道理上讲代理是一种软件设计模式,目的地希望能做到代码重用.具体上讲,代理这种设计模式是通过不直接访问被代理对象的方式,而访问被代理对象的方法.这个就好比 商户----&g ...
- 【设计模式】代理模式 ( 动态代理 )
文章目录 一.动态代理使用流程 二.动态代理代码示例 1.订单类 2.Service 接口 3.Service 实现类 4.Service 静态代理类 5.Dao 接口 6.Dao 实现类 7.Ser ...
- 代理模式——静态代理,动态代理(JDK代理和CGLib代理)
概述 由于某些原因需要给某对象提供一个代理以控制对该对象的访问. 这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介. Java中的代理按照代理类生成时机不同又分为 ...
- Java 动态代理机制分析及扩展--转
http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/#icomments http://www.ibm.com/developerworks/c ...
- JAVA的静态代理与动态代理比较--转载
扩展:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/JAVA的静态代理与动态代理比较 一.概念 代理模式是常用的Java 设计模式,它的特 ...
最新文章
- 002_XMLHttpRequest对象
- Lesson 12.3 线性回归建模实验
- Python环境的安装
- js中cookie操作
- Django - 模板相关
- 奇安信代码安全实验室帮助Red Hat修复多个QEMU高危漏洞,获官方致谢
- 基于SSM框架的简单图书管理系统
- 如何删除绿盾加密软件
- 五大主流浏览器的介绍
- 安卓磁链搜索下载播放和原理探索
- 国内硕士申请加拿大计算机博士难度,【经验分享】如何申请加拿大硕士研究生或者博士?...
- 计算机网络自学之路,必看的网络工程师学习路线
- 沉浸式体验,文化与科技融合创新的新业态
- 什么是CDN,简单了解CDN
- 重复启动Tomcat时,大概率出现Deploying web application direct
- 福建福州软考考点安排在哪?
- 量子计算(一):量子计算是什么
- 【读书笔记】没有时间干活儿没有时间逛知乎,却有时间读书【刻意学习-Scalers-处事思维类】
- 区块链+游戏还有什么可能性?
- harbor配置nginx代理