黑马程序员技术交流社区
标题:
关于代理的思考
[打印本页]
作者:
﹏゛心被伱牵
时间:
2012-11-2 17:35
标题:
关于代理的思考
我们知道代理是一种功能的增强,但是为什么一定非要是接口了 ,比如我们在里面写一个工具类,写一个增强的方法传进去这样不行吗
作者:
周万谋
时间:
2012-11-2 18:01
本帖最后由 周万谋 于 2012-11-2 18:03 编辑
基于代理,我整合了一下资料:
JAVA中生成动态代理的方式有两种:
1、JDK自带实现的方法: Proxy实现代理的目标类必须有实现接口;生成出来的代理类为接口实现类,和目标类不能进行转换,只能转为接口实现类进行调用,明显特点:通过此方法生成出来的类名叫做 $Proxy0.
2、用CGLIB包实现:有时我们想要为一个实在的类编写动态代理,这时就要选择一些开源的lib包,如CGLIB包,同时还需要asm包。CGLIB实现方式是对代理的目标类进行继承;生成出了的代理类可以没方法,生成出来的类可以直接转换成目标类或目标类实现接口的实现类,因为JAVA向上转换,明显特点:通过输出看出,看出生成出的代理类的parent类为代理的目标类
两种方法的区别:CGLIB用于AOP,jdk中的proxy必须基于接口,CGLIB却没有这个限制。
至于为什么要使用接口,我想是因为接口有很强的扩展功能,如果以后新增什么类,只要实现了接口,照样可以代理它。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2