在Proxy Design Pattern的情况下,JDK's Dynamic Proxy和第三方动态代码生成API (如CGLib )有什么不同?
使用这两种方法有什么区别,什么时候应该优先使用其中一种方法?
发布于 2012-05-19 18:07:39
JDK动态代理只能通过接口进行代理(因此您的目标类需要实现一个接口,然后该接口也由proxy类实现)。
CGLIB (和javassist)可以通过子类化来创建代理。在这种情况下,代理成为目标类的子类。不需要接口。
所以Java动态代理可以代理:public class Foo implements iFoo
,其中CGLIB可以代理:public class Foo
编辑:
值得一提的是,由于javassist和CGLIB通过子类化使用代理,这就是在使用依赖于此的框架时不能声明final方法或将类设为final的原因。这将阻止这些库允许子类化您的类并覆盖您的方法。
https://stackoverflow.com/questions/10664182
复制相似问题