Java动态代理
动态代理有两种实现方式:
- JDK 动态代理(重要)
- CGLIB 动态代理
1. CGLIB(了解)
使用继承机制,通过在子类中重写同名方法完成对父类的代理
其要求被代理的类不能为 final,方法也不能为 final
要求较宽松,只要类能被继承就能使用此方法,效率相对较高
2. JDK 动态代理
2.1 重要的类和方法
Proxy 类:用于创建代理对象的类,其中有很多静态方法
静态方法:newProxyInstance
1 | public static Object newProxyInstance(ClassLoader loader, |
参数:
- ClassLoader loader 要代理的目标对象的类加载器,负责向内存中加载对象,可以通过反射获取
- Class<?>[] interfaces 目标对象实现的接口
- InvocationHandler h 我们自己写的,代理类要完成的功能
返回值:
- 代理对象
2.2 实现动态代理的步骤
- 创建接口,定义目标类要完成的功能
- 创建目标类实现接口
- 创建 InvocationHandler 接口的实现类,在 invoke 方法中完成代理类的功能
- 调用目标方法
- 增强功能
- 使用 Proxy 类的静态方法,创建代理对象,并返回
1 | //可以用这个类,自动生成代理类 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 葡萄的个人博客!
评论
GitalkWaline