代理模式之spring的AOP
来源:互联网 发布:sql server有mac版吗 编辑:程序博客网 时间:2024/05/21 22:34
先理解一下概念:
什么是代理模式
有一座山, 这座山以前每个人都可以经过,但是突然有一天,有一个恶霸把这座山霸占了,他说此树是我载,此路是我开,以后这座山归我管了。任何想要经过这座山的,必须向我献上财物,最后经过我的同意,我才允许你们经过这座山。
有一个操作系统,以前是免费的,每个人都可以下载。但是有一天,运营商突然说,这个操作系统要收费了,谁想要下载的,必须向我支付费用,我才给你们下载的链接。
这里的恶霸和运营商就相当于代理角色。
代理角色掌握着真实角色的控制权。
要通过代理角色访问真实角色,必须满足代理角色的业务条件(交上财物,支付费用等)。
别人眼中的代理模式
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用。
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
生活中的例子:过年加班比较忙,没空去买火车票,这时可以打个电话到附近的票务中心,叫他们帮你买张回家的火车票,当然这会附加额外的劳务费。但要清楚票务中心自己并不卖票,只有火车站才真正卖票,票务中心卖给你的票其实是通过火车站实现的。这点很重要!
上面这个例子,你就是“客户”,票务中心就是“代理角色”,火车站是“真实角色”,卖票称为“抽象角色”!
代理模式JAVA代码示例:
1//抽象角色:抽象类或接口
2interface Business
3{
4 void doAction();
5}
6//真实角色:真正实现了业务逻辑接口
7class BusinessImpl implements Business
8{
9 public void doAction()
10 {
11 System.out.println("真实角色中的方法被执行!");
12 }
13}
14//代理角色:自己并未实现业务逻辑接口,而是调用真实角色来实现
15class BusinessImplProxy implements Business
16{
17 private BusinessImpl bi;
18 public void doAction()
19 {
20 if (bi==null)
21 {
22 bi = new BusinessImpl();
23 }
24 doBefore();
25 bi.doAction();
26 doAfter();
27 }
28 public void doBefore()
29 {
30 System.out.println("前置处理!");
31 }
32 public void doAfter()
33 {
34 System.out.println("后置处理!");
35 }
36}
37//测试类
38class Test
39{
40 public static void main(String[] args)
41 {
42 //引用变量定义为抽象角色类型
43 Business bi = new BusinessImplProxy();
44 bi.doAction();
45 }
46}
47
2interface Business
3{
4 void doAction();
5}
6//真实角色:真正实现了业务逻辑接口
7class BusinessImpl implements Business
8{
9 public void doAction()
10 {
11 System.out.println("真实角色中的方法被执行!");
12 }
13}
14//代理角色:自己并未实现业务逻辑接口,而是调用真实角色来实现
15class BusinessImplProxy implements Business
16{
17 private BusinessImpl bi;
18 public void doAction()
19 {
20 if (bi==null)
21 {
22 bi = new BusinessImpl();
23 }
24 doBefore();
25 bi.doAction();
26 doAfter();
27 }
28 public void doBefore()
29 {
30 System.out.println("前置处理!");
31 }
32 public void doAfter()
33 {
34 System.out.println("后置处理!");
35 }
36}
37//测试类
38class Test
39{
40 public static void main(String[] args)
41 {
42 //引用变量定义为抽象角色类型
43 Business bi = new BusinessImplProxy();
44 bi.doAction();
45 }
46}
47
代理模式允许使用抽象类或接口作为“抽象角色”,每个“代理角色”代理了一个“真实角色”,如果要代理的“真实角色”比较多,这势必造成大量的“代理角色”造成代码的急剧膨胀,其实其内部结构都是类似的,要是在运行时能动态生成“代理角色”就好了。
0 0
- 代理模式之spring的AOP
- Spring AOP之代理模式
- Spring aop之代理模式
- Spring-AOP的代理模式
- spring-aop入门之静态代理模式
- spring-aop入门之动态代理模式
- Spring AOP代理模式
- Spring AOP 代理模式
- Spring中AOP的代理模式
- Spring AOP的代理模式详解
- 代理模式与spring的AOP
- Spring AOP之基于ProxyFactoryBean的代理
- Spring AOP中的代理模式
- Spring AOP基础:代理模式
- 代理模式及spring AOP
- Spring的代理模式及Spring AOP-JDKDynamicAopProxy
- Spring框架(四)AOP之代理模式
- Spring AOP之代理机制
- dos 命令自动关机,不安装任何软件
- Grit 美国最时髦的教育理念,我们从中要学习什么?
- STL sort简单用来快速排序
- 读书与走天涯
- Servlet运行周期与原理流程
- 代理模式之spring的AOP
- 使用C语言打印月历
- Eclipse转Android Studio的过程中有必要弄明白的一些问题
- JavaScript练习五之仿bootstrap之Tooltip
- 空间数据下载
- linux安装jdk和tomcat
- Unity中使用Vertex Snapping(顶点捕捉)
- Android App 录制GIF演示动画
- CentOS6.5安装ActiveMQ