A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ﹏゛心被伱牵 中级黑马   /  2012-11-2 17:35  /  1025 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们知道代理是一种功能的增强,但是为什么一定非要是接口了 ,比如我们在里面写一个工具类,写一个增强的方法传进去这样不行吗

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 周万谋 于 2012-11-2 18:03 编辑

基于代理,我整合了一下资料:
JAVA中生成动态代理的方式有两种:
1、JDK自带实现的方法: Proxy实现代理的目标类必须有实现接口;生成出来的代理类为接口实现类,和目标类不能进行转换,只能转为接口实现类进行调用,明显特点:通过此方法生成出来的类名叫做 $Proxy0.
2、用CGLIB包实现:有时我们想要为一个实在的类编写动态代理,这时就要选择一些开源的lib包,如CGLIB包,同时还需要asm包。CGLIB实现方式是对代理的目标类进行继承;生成出了的代理类可以没方法,生成出来的类可以直接转换成目标类或目标类实现接口的实现类,因为JAVA向上转换,明显特点:通过输出看出,看出生成出的代理类的parent类为代理的目标类
两种方法的区别:CGLIB用于AOP,jdk中的proxy必须基于接口,CGLIB却没有这个限制。
至于为什么要使用接口,我想是因为接口有很强的扩展功能,如果以后新增什么类,只要实现了接口,照样可以代理它。

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马