JDK动态代理和cglib的区别

目录 技术
分类:
  • 基于接口的动态代理
  • 基于子类的动态代理
cglib基于子类的动态代理:
  • 涉及的类:Enhancer
  • 提供者:第三方cglib库
-如何创建代理对象:
  • 使用Enhancer类中的create方法
-创建代理对象的要求:
  • 被代理类不能是最终类
-newProxyInstance方法的参数:在使用代理时需要转换成指定的对象
  • ClassLoader:类加载器,用于加载代理对象字节码的。和被代理对象使用相同的类加载器。固定写法
  • Callback:用于提供增强的代码,一般写的都是该接口的子接口实现类,MethodInterceptor

JDK基于接口的动态代理:
  • 涉及的类:proxy
  • 提供者:Jdk官方
-JDK动态代理如何创建代理对象:
  • 使用Proxy类中的newProxyInstance方法
-创建代理对象的要求:
  • 被代理类最少实现一个接口,如果没有则不能使用
-newProxyInstance方法的参数:在使用代理时需要转换成指定的对象
  • ClassLoader:类加载器,用于加载代理对象字节码的。和被代理对象使用相同的类加载器。固定写法
  • Class[]:字节码数组,它是用于让代理对象和被代理对象有相同方法。固定写法
  • InvocationHandler:用于提供增强的代码,一般写一个该接口的实现类,通常情况加都是匿名内部类,但不是必须的
两者区别总结:
Cglib
JDK
是否提供子类代理
是否提供接口代理
是(可强制)
区别
必须依赖于CGLib的类库,但是它需要类来实现任何接口代理的是指定的类生成一个子类,覆盖其中的方法
实现InvocationHandler
使用Proxy.newProxyInstance产生代理对象
被代理的对象必须要实现接口

暂无评论

发表评论

电子邮件地址不会被公开。