JDK动态代理只能按接口进行代理(因此,您的目标类需要实现一个接口,然后该接口也可以由代理类实现)。
CGLIB(和javassist)可以通过子类化创建代理。在这种情况下,代理将成为目标类的子类。无需接口。
因此,Java Dynamic代理可以代理:
public class Foo implements iFooCGLIB可以代理:
publicclass Foo
编辑:
我应该提到的是,由于javassist和CGLIB通过子类化使用代理,因此这就是您在使用依赖于此的框架时无法声明final方法或将类定为final的原因。这将阻止这些库允许子类化您的类并覆盖您的方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)