首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JDK动态代理和CGLib有什么不同?

JDK动态代理和CGLib有什么不同?
EN

Stack Overflow用户
提问于 2012-05-19 18:03:47
回答 1查看 72.2K关注 0票数 175

Proxy Design Pattern的情况下,JDK's Dynamic Proxy和第三方动态代码生成API (如CGLib )有什么不同?

使用这两种方法有什么区别,什么时候应该优先使用其中一种方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-19 18:07:39

JDK动态代理只能通过接口进行代理(因此您的目标类需要实现一个接口,然后该接口也由proxy类实现)。

CGLIB (和javassist)可以通过子类化来创建代理。在这种情况下,代理成为目标类的子类。不需要接口。

所以Java动态代理可以代理:public class Foo implements iFoo,其中CGLIB可以代理:public class Foo

编辑:

值得一提的是,由于javassist和CGLIB通过子类化使用代理,这就是在使用依赖于此的框架时不能声明final方法或将类设为final的原因。这将阻止这些库允许子类化您的类并覆盖您的方法。

票数 212
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10664182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档