静态代理与动态代理的区别

大标 2022年3月9日18:44:48
评论
24
摘要

1.静态代理:代理类和目标类实现相同的接口,在代理中去调用目标类的方法,去实现静态代理。程序运行前生成。2.jdk动态代理 代理处理器,实现invocationHandler接口,重写Invoke方法。方法参数包括代理目标类的真实代理对象,方法名称,方法参数个数。 创建jdk动态代理,通过proxy代理类去调用newProxyInstance方法,方法参数是目标类的加载器,代理类的接口,代理类处理

1.静态代理:代理类和目标类实现相同的接口,在代理中去调用目标类的方法,去实现静态代理。程序运行前生成。

2.jdk动态代理

  •  代理处理器,实现invocationHandler接口,重写Invoke方法。方法参数包括代理目标类的真实代理对象,方法名称,方法参数个数。
  •  创建jdk动态代理,通过proxy代理类去调用newProxyInstance方法,方法参数是目标类的加载器,代理类的接口,代理类处理器。实现动态代理类,去调用方法。

3.CGLB动态代理

  •  创建方法拦截器,实现methodIntercepter的接口,重写Intercept方法,方法参数名称为代理类对象,被代理拦截的方法,拦截的参数,代理类对应的目标类的代理。
  •  创建CGLB动态代理,使用Enhancer调用getProxy方法,设置被代理类,被代理的类加载器,设置方法拦截器,创建代理。

4.总结

       jdk动态代理是通过实现和目标类的接口,通过构造器参数实现动态代理的调用。而CGLB动态代理是生成目标类的子类,通过拦截方法去实现。

  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
大标
  • 本文由 发表于 2022年3月9日18:44:48
  • 转载请务必保留本文链接:https://www.tanhuibiao.com/script/qita/1296.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: