介绍
在JDK的动态代理机制中,有两个重要的类或接口,一个是InvocationHandler接口,另一个则是Proxy类。InvocationHandler接口是用来定义动态代理类的实例被调用时的调用处理,比如前置处理、调用被代理类实例、后置处理等,而Proxy是用来创建动态代理类和实例的,因为只有得到了这个对象我们才能调用那些需要代理的方法。
JDK的动态代理只支持基于接口,不支持基于类。
Proxy
仅与被代理接口有关,与具体被代理类无直接关系
1 | |
newProxyInstance
生成代理实例
ClassLoader loader:生成代理类的类加载器
Class<?>[] interfaces:接口
InvocationHandler h:调用处理器
getProxyClass
生成代理类
ClassLoader loader:生成代理类的类加载器
Class<?>[] interfaces:接口
InvocationHandler
一般而言会与被代理实例有关,进行前置、后置等处理外,调用被代理类实例
1 | |
invoke
Object proxy:生成的代理类的实例
Method method:被代理接口的方法
Object[] args:方法调用参数
样例
接口
1 | |
实现
1 | |
调用处理
1 | |
代理工厂
1 | |
或者
1 | |
运行
1 | |