使用代理对象完成用户请求,屏蔽用户对真实对象的访问
本节应用:实现延迟加载,提升性能(只是应用场景的一种),系统启动时初始化代理类,等真正用时再加载真实资源
参与者:
主题接口,定义代理类和真实主题的公共对外方法,也是代理类代理真实主题的方法
真实主题,实现业务逻辑的类
代理类,代理和封装真实主题
客户端,使用代理类和主题接口
静态代理(与动态代理区分,写好代码)
一种实现:客户端依赖主题接口(使用主题接口),真实主题和代理类都实现主题接口,代理类聚合真实主题(包含了真实主题),图和代码见书P17
动态代理(代理类的字节码将在运行时生成并载入到当前ClassLoader)
1.JDK自带的动态代理
代码见P18
2.CGLIB(推荐)
使用方法类似JDK的动态代理
3.Javassist(推荐)
代理工厂创建方法与CGLIB类似(性能差)
动态代码创建方法
4.ASM(本书没提)
要求最高,性能最好,但没有数量级的提升
用代理模式实现延迟加载的经典应用在Hibernate框架中