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