介绍
在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 |
|