欢迎光临散文网 会员登陆 & 注册

千锋教育2023版Java面试宝典Java面试200题(含美团、字节、阿里大厂真

2023-07-15 17:24 作者:bili_99880469921  | 我要投稿

JDK和CGLIB两种动态代理的原理和区别:

JDK动态代理:是利用反射生成一个实现代理类的匿名类->InvokeHandler来处理,缺点:只能为接口创建代理类的实例.

实现步骤:

  1. 创建一个实现 InvocationHandler 接口的类,重写 invoke 方法.
  2. 使用 Proxy 类的 newProxyInstance 方法创建代理对象,传入参数.
  3. 通过反射获取构造函数,然后通过构造函数创建动态代理类实例.


CGLIB动态代理:运行时就可以对字节码进行修改和动态生成,它是通过继承的方式来实现代理的.子类中采用的方法拦截的技术.

实现步骤:

  1. 创建一个实现 MethodInterceptor 接口的类,重写 intercept 方法.
  2. 使用 Enhancer 类创建代理对象,设置被代理类和自定义的 MethodInterceptor 实例。
  • 区别:
  • JDK 动态代理适用于需要代理接口的情况.
  • Cglib 动态代理则适用于代理普通类的情况.

千锋教育2023版Java面试宝典Java面试200题(含美团、字节、阿里大厂真的评论 (共 条)

分享到微博请遵守国家法律