首页 > 编程知识 正文

cglib动态代理不能代理接口,cglib和jdk动态代理性能区别

时间:2023-05-04 22:39:39 阅读:31799 作者:1775

在理解他们的区别之前,首先要弄清楚什么是代理模型

代理模式:代理类和被代理类实现公共接口(或继承),代理类具有到被代理类的索引,在实际运行时调用代理类的方法AOP通过动态代理实现。一、简单来说:

JDK动态代理只能为实现接口的类生成代理,而不能为类生成代理

CGLIB是类实现代理,主要为指定的类生成子类,并覆盖其中的方法(继承)

二、Spring在选择用JDK还是CGLiB的依据:

)1) Bean实现接口时,Spring使用JDK动态代理

)2)如果Bean没有实现接口,则Spring可以实现使用CGlib

)3)可以强制使用CGlib (在spring配置中使用AOP : AspectJ-autoproxyproxy-target-class=" true "/)

三、CGlib比JDK快?

(1)用CGLib实现动态代理,在CGLib的基础上采用ASM字节码生成框架,用字节码技术生成代理类比用Java反射更有效。 唯一需要注意的是,CGLib无法代理声明为final的方法。 这是因为CGLib原理动态生成被代理类的子类。

)2)在JDK动态代理和CGlib动态代理代码实验中,运行1W次,JDK7和8的动态代理性能比CGlib好20%左右。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。