我知道我们可以使用cglib代理类。我想为什么JDK动态代理只能通过接口代理。我已经阅读了源代码。
/*
* Verify that the Class object actually represents an
* interface.
*/
if (!interfaceClass.isInterface()) {
throw new IllegalArgumentException(
interfaceClass.getName() + " is not an interface");
}
在Proxy.newProxyInstance(loader,interfaces,h)的方法中,它将检查条件。 我想知道为什么必须是接口?这是标准吗?
答案 0 :(得分:-1)
只是个人理解:
JDK
动态代理的原则是基于传入接口创建新类。它可以确保生成的结构是一致的。
Cglib
用于创建继承类的子类,使用ASM库动态修改代码以实现子类,因此可以使用传入的类引用来实现代理类。