【jdk动态代理】怎么理解JAVA JDK动态代理只能基于接口做代理? 这里的接口指的是被代理必须实现接口么,但我看有文章里说被代理类没有实现接口的话它的publc方法也是可以被代理的。
【jdk动态代理】怎么理解JAVA JDK动态代理只能基于接口做代理? 这里的接口指的是被代理必须实现接口么,但我看有文章里说被代理类没有实现接口的话它的publc方法也是可以被代理的。
return (T) Proxy.newProxyInstance(target.getClass().getClassLoader(), /** 获取委托类的类加载器,所谓委托类就是接口实现类 */
target.getClass().getInterfaces(), /** 获取委托类实现的所有接口 */
this);
看到上面这个方法getInterfaces()应该就不用解释为什么动态代理基于接口做代理
怎么理解JAVA JDK动态代理只能基于接口做代理?
因为JDK动态代理的实现方式就是基于接口的啊..
假设你有接口A,你要代理类B(实现接口A),那么JDK会生成一个实现了接口A的代理类类C
call graph为 Proxy.method() -> InvocationHandler.invoke() -> TargetClass.method()
你按照API写一遍,再反编译一下生成的类,一看就明白了啊...
15 回答8.2k 阅读
8 回答5.9k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.2k 阅读✓ 已解决
JDK动态代理是通过重新生成一个类实现代理对象的接口来达到代理的,所以只能基于接口
是的
要么你理解错了,要么它讲错了