JDK 动态代理最核心的一个接口和方法如下所示:
1. java.lang.reflect 包中的 InvocationHandler 接口:
“`java
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:调用处理器类的对象实例
该方法会返回一个被修改过的类的实例,从而可以自由的调用该实例的方法
JDK 动态代理最核心的一个接口和方法如下所示:
1. java.lang.reflect 包中的 InvocationHandler 接口:
“`java
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 方法:
“`java
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException
“`
其中的参数含义如下:
1. loader:被代理的类的类加载器;
2. interfaces:被代理类的接口数组;
3. invocationHandler:调用处理器类的对象实例
该方法会返回一个被修改过的类的实例,从而可以自由的调用该实例的方法