社区
Java SE
帖子详情
为什么使用动态代理的对象必须实现一个或多个接口
fran_maomao
2015-10-16 04:32:24
初学动态代理,不是很清楚为什么使用动态代理的对象必须实现一个或多个接口?搜了一些解答说实现接口可以定义接口规范,不是很理解,有没有大神可以解释一下~ 谢谢
...全文
1451
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是没有要求实现代理,但是也要求继承父类的。本质上是一样的,就是要求有一个超类(或者接口),用来代理目标类。 从广义的实现接口来讲,动态代理就是使用超类代理目标类。
JDK
动态代理
为什么
必须
要基于
接口
目录1. 前言2.
一个
简单的例子2.1. 定义
接口
2.2.
接口
实现
类2.3. 自定义 `Handler`2.4. 测试2.5. 输出结果 1. 前言 JDK
动态代理
的应用还是非常广泛的,例如在 Spring、MyBatis 以及 Feign 等很多框架中
动态代理
都被大量的
使用
,可以说学好 JDK
动态代理
,对于我们阅读这些框架的底层源码还是很有帮助的 2.
一个
简单的例子 在分析原因之前,我们先完整的看一下
实现
JDK
动态代理
需要几个步骤,首先需要定义
一个
接口
2.1. 定义
接口
public in
JDK
动态代理
原理:为什么目标
对象
一定要
实现
接口
?
JDK
动态代理
、Proxy.newProxyInstance、InvocationHandler、目标
对象
一定要
实现
接口
、Proxy类
Java
动态代理
为什么要求
必须
实现
顶级
接口
前言 如果你学习过spring,那么你一定接触和
使用
过Aop。大家都知道Spring的Aop是采用
动态代理
方式
实现
的。而在Spring的Aop中
使用
的
动态代理
通常有两种: java原生的
动态代理
cglib的
动态代理
我们都学习过这两种代理方式的区别。java原生的
动态代理
所代理的
对象
必须
要
实现
一个
顶级
接口
,而cglib的
动态代理
则不需要这样的
接口
。在很长一段时间里很迷惑为什么java的动态代...
JDK
动态代理
为什么
必须
要基于
接口
?
原创:微信公众号 码农参上,欢迎分享,转载请保留出处。 前几天的时候,交流群里的小伙伴抛出了
一个
问题,为什么JDK的
动态代理
一定要基于
接口
实现
呢? 好的安排,其实要想弄懂这个问题还是需要一些关于代理和反射的底层知识的,我们今天就盘一盘这个问题,走你~
一个
简单的例子 在分析原因之前,我们先完整的看一下
实现
jdk
动态代理
需要几个步骤,首先需要定义
一个
接口
: public interface Worker { void work(); } 再写
一个
基于这个
接口
的
实现
类: public class .
JDK
动态代理
,代理
接口
没有
实现
类,
实现
动态代理
JDK代理,代理的是
接口
,那么笔者想一想,既然代理的是
接口
,那如果没有
实现
类怎么办,能不能代理。答案是可以的,Mybatis就是这样的。 Mybatis
使用
JDK
动态代理
来
实现
Mapper
接口
,事先保存好Mapper
接口
,和
接口
声明的方法,返回值,参数类型,然后代理类的方法调用的时候
使用
MapperMethod这个事先放入方法缓存里的
对象
来真实调用功能。 笔者极度简化了一下代码: 被代理的接...
Java SE
62,621
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章