千锋教育2023版Java面试宝典Java面试200题(含美团、字节、阿里大厂真
2023-07-15 17:24 作者:bili_99880469921 | 我要投稿

JDK和CGLIB两种动态代理的原理和区别:
JDK动态代理:是利用反射生成一个实现代理类的匿名类->InvokeHandler来处理,缺点:只能为接口创建代理类的实例.
实现步骤:
- 创建一个实现
InvocationHandler
接口的类,重写invoke
方法. - 使用
Proxy
类的newProxyInstance
方法创建代理对象,传入参数. - 通过反射获取构造函数,然后通过构造函数创建动态代理类实例.
CGLIB动态代理:运行时就可以对字节码进行修改和动态生成,它是通过继承的方式来实现代理的.子类中采用的方法拦截的技术.
实现步骤:
- 创建一个实现
MethodInterceptor
接口的类,重写intercept
方法. - 使用
Enhancer
类创建代理对象,设置被代理类和自定义的MethodInterceptor
实例。
- 区别:
- JDK 动态代理适用于需要代理接口的情况.
- Cglib 动态代理则适用于代理普通类的情况.