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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kamo 中级黑马   /  2015-10-18 18:11  /  445 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/**
* 代理模式
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。
按照代理的创建时期,代理类可以分为两种。
静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理:在程序运行时,运用反射机制动态创建而成。
* @author kamo
* 动态代理的两种方式:
*CGLib创建的动态代理对象性能比JDK创建的动态代理对象的性能高不少,
*但是CGLib在创建代理对象时所花费的时间却比JDK多得多,
*所以对于单例的对象,因为无需频繁创建对象,用CGLib合适,
*反之,使用JDK方式要更为合适一些。
*同时,由于CGLib由于是采用动态创建子类的方法,对于final方法,无法进行代理!
*
*还有,所谓的动态代理的三种实现
*                 其实,就是JDK的这一种,在创建代理类是,换换方式。比如
*    1.通过,反射,拿到动态类的class,并获得构造函数,创建代理类
*    2.这个是在1中,对于代理类,是否InvocationHandler接口,出现分支
*            若没实现,则在创建实例时,多一个内部类接口实现。
*    3,这个是用的Proxy.newProxyInstance()函数,也就是,获取代理类的时候没用反射
*/

1 个回复

倒序浏览
以上,可能不便于没基础的同学理解,只是若碰到查阅不少资料的人,应该还是能看懂的。代码太多,就不贴了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马