java 代理proxy的介绍
2017-08-28 02:22
253 查看
利用代理可以在运行时创建一个实现了一组给定接口的新类。这种功能只有在编译是无法确定实现那个接口时才有必要使用。
何时使用代理
假设有一个表示接口的Class对象(有可能只含有一个接口),他的确切类型在编译时无法知道。这确实有些难度。要想构造一个实现这些接口的类,就需要使用newInstance方法或者反射来找出这个类的构造器。但是,不能实例化一个接口,需要在程序处于运行状态时定义一个新类。
为了解决这个问题,有些程序将会生成代码;将这些代码放置在一个文件中;调用编译器;然后在加载结果类文件。很自然,这样做的速度会比较慢,并且需要将编译器与程序放在一起。而代理机制则是一种更好的解决方案。代理类可以在运行时创建全新的类。这样的代理类能够实现指定的接口。尤其是,它具有下列方法:
1、指定接口所需要的全部方法
2、Object类中的全部方法,例如:toString,equals等
然而,不能在运行时定义这些方法的新代码。而是要提供一个调用处理器(invocation)。调用处理器是实现了InvocationHandler接口的类对象。在这个接口中只有一个方法:
Object invoke(Object proxy, Method method , Object[] args)
无论何时调用代理对象的方法,调用处理器的invoke方法都会被调用,并向其传递Method对象和原始的调用参数。调用处理器必须给出处理调用的方式
创建代理对象
要想创建一个代理对象,需要使用Proxy类的newProxyInstance方法。这个方法有三个参数:
1、一个类加载器(class loader)。作为Java安全模型的一部分,对于系统类和从因特网上下载下来的类,可以使用不同的类加载器。
2、一个Class对象数组,每个元素都是需要实现的接口
3、一个调用处理器
还有两个需要解决的问题。如何定义一个处理器?能够用结果代理对象做些什么?当然,这两个问题的答案取决于打算使用代理机制解决什么问题。使用代理可能处于很多原因,例如:
1、路由对远程服务器的方法调用
2、在程序运行期间,将用户接口事件与动作关联起来。
3、为调试,跟踪方法调用
在示例程序中,使用代理和调用处理器跟踪方法调用,并且定义了一个TraceHander包装器类存储包的对象。其中的invoke方法打印被调用方法的名字和参数,随后用包装好的对象作为隐式参数调用这个方法。
何时使用代理
假设有一个表示接口的Class对象(有可能只含有一个接口),他的确切类型在编译时无法知道。这确实有些难度。要想构造一个实现这些接口的类,就需要使用newInstance方法或者反射来找出这个类的构造器。但是,不能实例化一个接口,需要在程序处于运行状态时定义一个新类。
为了解决这个问题,有些程序将会生成代码;将这些代码放置在一个文件中;调用编译器;然后在加载结果类文件。很自然,这样做的速度会比较慢,并且需要将编译器与程序放在一起。而代理机制则是一种更好的解决方案。代理类可以在运行时创建全新的类。这样的代理类能够实现指定的接口。尤其是,它具有下列方法:
1、指定接口所需要的全部方法
2、Object类中的全部方法,例如:toString,equals等
然而,不能在运行时定义这些方法的新代码。而是要提供一个调用处理器(invocation)。调用处理器是实现了InvocationHandler接口的类对象。在这个接口中只有一个方法:
Object invoke(Object proxy, Method method , Object[] args)
无论何时调用代理对象的方法,调用处理器的invoke方法都会被调用,并向其传递Method对象和原始的调用参数。调用处理器必须给出处理调用的方式
创建代理对象
要想创建一个代理对象,需要使用Proxy类的newProxyInstance方法。这个方法有三个参数:
1、一个类加载器(class loader)。作为Java安全模型的一部分,对于系统类和从因特网上下载下来的类,可以使用不同的类加载器。
2、一个Class对象数组,每个元素都是需要实现的接口
3、一个调用处理器
还有两个需要解决的问题。如何定义一个处理器?能够用结果代理对象做些什么?当然,这两个问题的答案取决于打算使用代理机制解决什么问题。使用代理可能处于很多原因,例如:
1、路由对远程服务器的方法调用
2、在程序运行期间,将用户接口事件与动作关联起来。
3、为调试,跟踪方法调用
在示例程序中,使用代理和调用处理器跟踪方法调用,并且定义了一个TraceHander包装器类存储包的对象。其中的invoke方法打印被调用方法的名字和参数,随后用包装好的对象作为隐式参数调用这个方法。
相关文章推荐
- Java--Proxy代理介绍及实现机制
- Java设计模式之代理模式(Proxy模式)介绍
- Java--Proxy代理介绍及实现机制
- Ext中代理Proxy的介绍
- Java动态代理一——动态类Proxy的使用
- Java---代理设计模式(Proxy)
- Java动态代理一——动态类Proxy的使用
- java动态代理实现Proxy和InvocationHandler cglib
- java proxy 代理
- 代理模式(Proxy) Java
- Java动态代理一——动态类Proxy的使用
- Java 动态代理与CGLIB详细介绍
- Java基础加强总结(三)——代理(Proxy)
- Java动态代理一——动态类Proxy的使用
- java代理的学习,通过类实现接口来实现代理。proxy来创建动态类,和InvocationHandler接口的实现,和工作原理。
- JAVA 反射之代理Proxy
- 设计模式(3)-结构型-代理模式(proxy)以及java动态代理的两种方式
- java 动态代理深度学习(Proxy,InvocationHandler),含$Proxy0源码
- Java基础加强总结——代理(Proxy)
- java 动态代理深度学习(Proxy,InvocationHandler),含$Proxy0源码