博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 代理的概念与作用
阅读量:5024 次
发布时间:2019-06-12

本文共 1261 字,大约阅读时间需要 4 分钟。

1、引入:

为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理、日志、计算方法的运行时间、事务管理、等等,你准备如何做?

编写一个与目标类具有相同接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系统功能的代码。

 

2、代理类的优点:

如果采用工厂模式和配置文件的方式进行管理,则不需要修改客户端程序,在配置文件中配置是使用目标类、还是代理类,这样以后很容易切换,譬如,想要日志功能时就配置代理类,否则配置目标类,这样,增加系统功能很容易,以后运行一段时间后,又想去掉系统功能也很容易。

 

目标类:                              代理类:

 

class X{                               Xproxy{

 

  void sayHello(){                       void sayHello(){

 

syso:Hello;                            startTime

 

}                                           X. sayHello();

 

}                                      endTime;}}

 

一般用接口来引用其子类,如:Collectioncoll = new ArrayList();

 

AOP

系统中存在交叉业务,一个交叉业务就是要切入到系统中的一个方面,如下所示:

                              安全       事务         日志

StudentService  ------|----------|------------|-------------

CourseService   ------|----------|------------|-------------

MiscService       ------|----------|------------|-------------

用具体的程序代码描述交叉业务:

method1         method2          method3

{                      {                       {

------------------------------------------------------切面

....            ....              ......

------------------------------------------------------切面

}                       }                       }

交叉业务的编程问题即为面向方面的编程(Aspect oriented program ,简称AOP),AOP的目标就是要使交叉业务模块化。可以采用将切面代码移动到原始方法的周围,这与直接在方法中编写切面代码的运行效果是一样的,如下所示:

------------------------------------------------------切面

func1         func2            func3

{             {                {

....            ....              ......

}             }                }

------------------------------------------------------切面

使用代理技术正好可以解决这种问题,代理是实现AOP功能的核心和关键技术。

 

安全,事务,日志等功能要贯穿到好多个模块中,所以,它们就是交叉业务

重要原则:不要把供货商暴露给你的客户

转载于:https://www.cnblogs.com/fanweisheng/p/11137858.html

你可能感兴趣的文章
单片机——间隔点亮LED
查看>>
【Python】实战一 外星人入侵
查看>>
Repeater 动态增加删除一行
查看>>
java学习笔记25(Collections类)
查看>>
KMP
查看>>
Java多线程基础
查看>>
4 自动化构建工具gulp
查看>>
Xss过滤,只json型数据过滤,图片文件不过滤,采用jsoup
查看>>
5号团队-团队任务4:每日立会(2018-12-6)
查看>>
Windows8应用开发学习(四)AppBar
查看>>
Android 使用 WebView
查看>>
微软企业库验证 Validations
查看>>
【转载】C++中的线程函数如何访问类中的成员变量
查看>>
[Windows报错]要求的函数不受支持、这可能是由于 CredSSP 加密 Oracle 修正
查看>>
C - 高速の廃墟と巨人 HDU - 2874 终版LCARMQ模板
查看>>
Ducci Sequence UVA - 1594 多元组表示方法
查看>>
CentOS持久化二进制日志(systemd日志)
查看>>
SEO优化工具之三——Google百宝箱
查看>>
C# HttpClient 使用相关积累
查看>>
linux进程地址空间详解(转载)
查看>>