代理模式:
1.代理模式的特征是代理类与委托类实现同样的接口(一般情况下)或者代理类继承委托类。
2.代理类主要负责给委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等
3.代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象相关联
4.代理类的对象本身并不真正实现功能,而是通过调用委托类的对象的相关方法,来提供特定的功能(所以实现同样的接口才可以保证方法名相同)
5.代理类一般分为两类:静态代理和动态代理
一、静态代理
在程序运行前,代理类的.class文件就已经存在了
例如:
二、动态代理
在程序运行时,代理类是运用了反射技术或字节码技术动态创建而成的
动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。
动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为使用它可以生成任意类型的动态代理类
例如:
三、CGLIB代理
1.代理模式的特征是代理类与委托类实现同样的接口(一般情况下)或者代理类继承委托类。
2.代理类主要负责给委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等
3.代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象相关联
4.代理类的对象本身并不真正实现功能,而是通过调用委托类的对象的相关方法,来提供特定的功能(所以实现同样的接口才可以保证方法名相同)
5.代理类一般分为两类:静态代理和动态代理
一、静态代理
在程序运行前,代理类的.class文件就已经存在了
例如:
接口文件:
委托类:
代理类:
测试例子:
二、动态代理
在程序运行时,代理类是运用了反射技术或字节码技术动态创建而成的
动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。
动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为使用它可以生成任意类型的动态代理类
例如:
接口文件:
委托类:
代理类:
日志类:
测试类:
三、CGLIB代理
JDK动态代理要求目标类实现接口,才能对其进行代理,但是对于没有实现接口的类,可以使用CGLib进行动态代理
如图:
目标对象:
代理类: 测类试: