介绍
什么是代理?
由于某些原因需要给某对象提供一个代理以控制对该对象的访问。 代理就是一个中介,要使用某些对象时,直接调用对象对应的代理。
- 通过代理转移部分对象职责
- 对象有什么方法,代理就一定有对应方法
创建代理
newProxyInstance 工作原理
-
创建代理类:
- 该方法会动态生成一个新的类,这个类实现了
interfaces数组中指定的接口。 - 这个新类会继承
Proxy类,并实现指定的接口。
- 该方法会动态生成一个新的类,这个类实现了
-
创建代理对象:
- 生成的代理类会被类加载器加载到 Java 虚拟机中。
- 然后,会创建该代理类的一个实例。
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) {}
- ClassLoader:类加载器
Class<?> []:Class<?>可以表示任何类型的 Class对象。这里指的生成的代理是什么样子,有哪些方法。- InvocationHandler:你调用一个代理对象的方法时,该方法的调用会被重定向到
InvocationHandler的invoke方法。这里定义代理对象要干什么事情。
invoke(Object proxy, Method method, Object[] args)