为什么使用动态代理的对象必须实现一个或多个接口

fran_maomao 2015-10-16 04:32:24
初学动态代理,不是很清楚为什么使用动态代理的对象必须实现一个或多个接口?搜了一些解答说实现接口可以定义接口规范,不是很理解,有没有大神可以解释一下~ 谢谢
...全文
1210 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjxtju 2015-10-17
  • 打赏
  • 举报
回复


headfirst 设计模式
http://pan.baidu.com/share/link?shareid=2797796125&uk=839776675&fid=1862987674
第一章12页。
代理是你的类内部组合了其他类,代理了这个其他类的功能。如果要动态,那么你组合的这个类就不能背严格限定。如果不使用接口你在组合的时候必定是这样的语句

ProxyedClass pc;
这限定了你的代理的类为ProxyedClass,不能动态代理多个类。如果抽象出接口。被代理的方法写在接口内部。那么
InterfaceOfProxyedClass pc;语句在实例化的时候可能为ProxyedClass1 ProxyedClass2 ProxyedClass3等等,只要他们实现了InterfaceOfProxyedClass,并且可以通过setter动态切换。
具体看了完整第一章应该就理解了。
dracularking 2015-10-17
  • 打赏
  • 举报
回复
只是jdk的动态代理要求实现接口,cglib没有强制,直接通过继承目标类实现
jsjszg 2015-10-17
  • 打赏
  • 举报
回复
从狭义的实现接口,即implements interface来讲, 单从动态代理本身来讲,没要求实现接口。只是jdk的动态代理机制要求实现接口。虽然cglib是没有要求实现代理,但是也要求继承父类的。本质上是一样的,就是要求有一个超类(或者接口),用来代理目标类。 从广义的实现接口来讲,动态代理就是使用超类代理目标类。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧