Java动态代理机制分析及扩展,第1部分 - 编程入门网
Java动态代理机制分析及扩展,第1部分时间:2011-06-21 IBM / 王忠平 何平引言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要 简单地指定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所 有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可 以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架。通过阅 读本文,读者将会对 Java 动态代理机制有更加深入的理解。本文首先从 Java 动态代理的运行机制和特点出发,对其代码进行了分析,推演了动态生成类的内 部实现。 代理:设计模式 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对 某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及 进行消息被委托类执行后的后续处理。 图 1. 代理模式 为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访 问者看来两者没有丝毫的区别。通过代理类这中间一层,能有效控制对委托类对 象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策 略预留了空间,从而在设计上获得了更大的灵活性。Java 动态代理机制以巧妙 的方式近乎完美地实践了代理模式的设计理念。 相关的类和接口 要了解 Java 动态代理的机制,首先需要了解以下相关的类或接口: java.lang.reflect.Proxy:这是 Java 动态代理机制的主类,它提供了一组 静态方法来为一组接口动态地生成代理类及其对象。 清单 1. Proxy 的静态 方法
Java动态代理机制分析及扩展,第1部分(2)时间:2011-06-21 IBM / 王忠平 何平java.lang.reflect.InvocationHandler:这是调用处理器接口,它自定义了 一个 invoke 方法,用于集中处理在动态代理类对象上的方法调用,通常在该方 法中实现对委托类的代理访问。 清单 2. InvocationHandler 的核心方法
每次生成动态代理类对象时都需要指定一个实现了该接口的调用处理器对象 (参见 Proxy 静态方法 4 的第三个参数)。 java.lang.ClassLoader:这是类装载器类,负责将类的字节码装载到 Java 虚拟机(JVM)中并为其定义类对象,然后该类才能被使用。Proxy 静态方法生 成动态代理类同样需要通过类装载器来进行装载才能使用,它与普通类的唯一区 别就是其字节码是由 JVM 在运行时动态生成的而非预存在于任何一个 .class 文件中。 每次生成动态代理类对象时都需要指定一个类装载器对象(参见 Proxy 静态 方法 4 的第一个参数) 代理机制及其特点 首先让我们来了解一下如何使用 Java 动态代理。具体有如下四步骤: 通过实现 InvocationHandler 接口创建自己的调用处理器; 通过为 P |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |