怎么实现 JDK 动态代理?

JDK 动态代理最核心的一个接口和方法如下所示:

1. java.lang.reflect 包中的 InvocationHandler 接口:

public interface InvocationHandler { 
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable; 
}

对于被代理的类的操作都会由该接口中的 invoke 方法实现,其中的参数的含义分别是:

  1. proxy:被代理的类的实例;
  2. method:调用被代理的类的方法;
  3. args:该方法需要的参数。

使用方法首先是需要实现该接口,并且我们可以在 invoke 方法中调用被代理类的方法并获得返回值,自然也可以在调用该方法的前后去做一些额外的事情,从而实现动态代理。

2. java.lang.reflect 包中的 Proxy 类中的 newProxyInstance 方法:

public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException

其中的参数含义如下:

  1. loader:被代理的类的类加载器;

  2. interfaces:被代理类的接口数组;

  3. invocationHandler:调用处理器类的对象实例

该方法会返回一个被修改过的类的实例,从而可以自由的调用该实例的方法

发表评论

后才能评论