所有分类
  • 所有分类
  • 未分类

JDK动态代理和CGLib动态代理的区别

简介

本文介绍Java中JDK动态代理和CGLib动态代理的区别。

区别概述

JDK动态代理CGLIB动态代理
接口是否需实现只能代理实现了接口的类。可以代理没有实现接口的类。
原理继承自Proxy,Proxy中有InvocationHandler的实现类的引用。 调用被代理的类的方法时,会调用父类(Proxy)的InvocationHandler的invoke方法。对指定的目标类生成一个子类并覆盖其中方法。
是否支持final class支持。不支持。 因为CGLIB是生成子类来实现AOP。
执行效率JDK6:比CGLIB效率低一点。 JDK1.7与1.8:效率高于CGLIB(1W次调用,高20%)JDK1.6之前,效率比JDK高。

实例

动态代理(JDK)

见:JDK动态代理–实例/原理 – 自学精灵

动态代理(CGLIB)

见:CGLIB动态代理–实例/原理 – 自学精灵

0

评论1

请先

  1. jdk动态代理 1、只提供接口的代理,不支持类的代理 2、运行时生成一个动态代理类$Proxy*.class 3、实现了目标类接口,并且实现了接口的所有方法 4、反射的方式调用目标方法invocationHandler中的invoke方法 cglib动态代理 1、可以代理没有实现接口的类 2、底层通过ASM生成目标类的一个子类,所以不支持final修饰的类 3、重写父类的方法 4、子类调用父类对应的方法
    summerzZ 2024-07-15 0
显示验证码
没有账号?注册  忘记密码?

社交账号快速登录