【jdk动态代理】怎么理解JAVA JDK动态代理只能基于接口做代理,这里的接口指的是被代理必须实现接口么?
【jdk动态代理】怎么理解JAVA JDK动态代理只能基于接口做代理? 这里的接口指的是被代理必须实现接口么,但我看有文章里说被代理类没有实现接口的话它的publc方法也是可以被代理的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
JDK动态代理是通过重新生成一个类实现代理对象的接口来达到代理的,所以只能基于接口
是的
要么你理解错了,要么它讲错了
动态代理增强的是委托类的功能,这里的委托类就是接口的实现类。其实动态代理就是为了避免手动写代理类。如果你不好理解,可以先看下静态代理实现。如果你要增强某个实现类的功能,静态代理的做法就是再写一个实现类去实现委托类相同的接口,然后注入委托类去实现接口,只是在实现前后加入增强功能的代码。
回到动态代理,只是通过反射去拿到相对应的接口实现
看到上面这个方法getInterfaces()应该就不用解释为什么动态代理基于接口做代理
因为JDK动态代理的实现方式就是基于接口的啊..
假设你有接口A,你要代理类B(实现接口A),那么JDK会生成一个实现了接口A的代理类类C
call graph为 Proxy.method() -> InvocationHandler.invoke() -> TargetClass.method()
你按照API写一遍,再反编译一下生成的类,一看就明白了啊...