本文介绍: 其原理是通过字节码技术动态生成一个要代理类的子类,子类重写要代理类的所有不是 final 的方法。Spring 在 5.X 之前默认的动态代理实现一直是 jdk 动态代理。Java 动态代理是一种在运行时创建代理类的机制,它允许在不提前知道代理类的具体类型的情况下,动态地创建一个代理对象来代替原始类。相比于静态代理,动态代理更加灵活,可以代理任意的接口类型,不需要为每个被代理的类编写专门的代理类,而是。静态代理就是在程序运行之前,提前写好被代理方法的代理类,编译后运行。在程序运行之前,class已经存在。
静态代理
静态代理就是在程序运行之前,提前写好被代理方法的代理类,编译后运行。在程序运行之前,class已经存在。
动态代理
Java 动态代理是一种在运行时创建代理类的机制,它允许在不提前知道代理类的具体类型的情况下,动态地创建一个代理对象来代替原始类。相比于静态代理,动态代理更加灵活,可以代理任意的接口类型,不需要为每个被代理的类编写专门的代理类,而是通过 Java 的反射机制在运行时动态生成代理类。
动态代理又被称为 JDK 代理或接口代理。
cglib代理
CGLIB(Code Generation Library)是一个开源的第三方库, 采用了非常底层的字节码技术。
其原理是通过字节码技术动态生成一个要代理类的子类,子类重写要代理类的所有不是 final 的方法。在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。它比使用 Java 反射的 JDK 动态代理要快。但缺点就是不能代理 final 方法。
JDK 动态代理和 CGLIB 动态代理均是实现 Spring AOP 的基础。
动态代理与 CGLIB 代理的区别
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。