Java特性 | 初识动态代理

69 阅读1分钟

介绍

什么是代理?

由于某些原因需要给某对象提供一个代理以控制对该对象的访问。 代理就是一个中介,要使用某些对象时,直接调用对象对应的代理。

  • 通过代理转移部分对象职责
  • 对象有什么方法,代理就一定有对应方法

创建代理

newProxyInstance 工作原理

  1. 创建代理类

    • 该方法会动态生成一个新的类,这个类实现了 interfaces 数组中指定的接口。
    • 这个新类会继承 Proxy 类,并实现指定的接口。
  2. 创建代理对象

    • 生成的代理类会被类加载器加载到 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)