6.5 代理
- 利用
代理(proxy)
可以在运行时创建一个实现了一组给定接口的新类- 这种功能只有在编译时无法确定需要实现那个接口时才有必有使用
6.5.1 何时使用代理
- 不能实例化一个接口,需要在程序处于运行状态时定义一个新类
6.5.2 创建代理对象
- 想要创建一个代理对象,需要使用
Proxy类的newProxyInstance方法
,该方法三个参数- 一个
类加载器(class loader)
- 一个
Class对象数组
- 一个
调用处理器
- 一个
6.5.3 代理类的特性
- 代理类实在程序运行中创建的
- 所有代理类都扩展于
Proxy类
- 一个代理类只有一个实例域—-调用处理器,它定义在Proxy的父类中.为了履行代理对象的职责,
所需要的任何附加数据都必须存储在调用处理器中
- 对于特定的类加载器和预设的一组接口来说,只能由一个代理类
- 代理类一定是public和final
API | 所在包 | 描述 |
---|---|---|
Object invoke(Object proxy,Method method,Object[] args) |
java.lang.reflect.InvocationHandler |
定义了代理对象调用方法是希望执行的动作 |
static Class<?> getProxyClass(ClassLoader loader,Class<?>... interface |
java.lang.reflect.Proxy |
返回实现指定接口的代理类 |
static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler handler) |
java.lang.reflect.Proxy |
构造实现指定接口的代理类的一个新实例 |
static boolean isProxyClass(Class<?> cl |
java.lang.reflect.Proxy |
如果cl是一个代理类就返回true |