代理模式
代理模式简介
问题提出
当项目的一些方法完成后,需要增加一些功能如安全性检查,若在原来方法上增加这些功能,就需要修改源代码。
最好的办法是使用一个程序,完成增加的功能,并能调用原来方法 ,这样就不需要修改原来的代码。该程序就是代理。
代理原则
可控制原对象,但不会改变原对象的接口。
代理的种类
静态代理(能看到的,实际存在的代理类)
动态代理(是在运行期生成出来的)
被代理对象的要求
以实现接口的方式完成方法的创建。
静态代理
代理类
- 必须和目标类实现同一个接口;
- 设置关联属性,通过关联属性指向目标类对象。
代理过程
在应用程序中调用代理类中的方法,完成要求的功能。
例: 在指定方法中加入权限验证
目标类:
代理类(切面类,实现和目标类同一个接口):
主配文件:
应用程序中直接调用代理类中的方法:
加粗样式
动态代理
在程序运行过程中能够创建代理对象,完成自动装配。
思想: 把横切性的关注点单独拿出来模块化,提高可维护性。
特点: 代理类不再存在,将在运行中生成。
切面类
切面类的特点
- 实现invocationHandler接口;
- 关联属性,指向目标对象;
- 重写invoke方法。
代码示例:
packa