面向切面编程

概念

AOP(Aspect-Oriented Programming, 面向切面编程,又称剖面导向程序设计)是计算机中的一种程序设计的思想,旨在将横切关注点与业务主体进行进一步分离,提高代码的模块化程度。
举个例子:那些url对于处理中都有鉴权相关代码时,一般就需要在每个url的处理中加上鉴权相关的调用处理,此时这个业务代码就已经跟鉴权处理产生了耦合。
如果要解除这个耦合,那么就需要将这些业务处理之外,但是工程上需要的(日志记录、性能统计、安全控制、异常处理等)通用处理的代码从业务对象代码中独立出来。达到这些通用处理变更时,业务无需感知的目的。
上面的逻辑中,业务对象的设计可以是基于业务进行的OOAD设计出来的。而独立于业务之外,需要跟业务配合执行的通用功能代码的解耦设计,有一种方法就是面向切面编程了。

broadcasting broadcasting

术语

不是很严谨的一个借喻: broadcasting

切面 Aspect

连接 通知(adivces) 和 切入点(pointcuts);决定在哪里执行什么。

连接点 Join point

业务流程在运行过程中需要插入切面的具体位置,可以是程序中的任何可识别的地方。

切入点 Pointcut

连接点的集合,并且定义通知应该切入到哪些连接点上,不同的通知通常需要切入到不同的连接点上

通知 Advice

在执行到切入点之前,实现的before、after等逻辑。包括:前置通知(Before)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)和环绕通知(Around)五种。

目标对象 Target

被一个或者多个切面所通知的对象。

代理对象 Proxy

将通知应用到目标对象之后被动态创建的对象。可以简单地理解为,代理对象为目标对象的业务逻辑功能加上被切入的切面所形成的对象。

切入/织入 Weaving

将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期。

Go语言AOP库

有一个库的使用说明看起来思路不错,但是无法正常运行:https://github.com/gogap/aop

参考

  1. 面向切面的程序设计


blog comments powered by Disqus
—  原创作品许可 — 署名-非商业性使用-禁止演绎 3.0 未本地化版本 — CC BY-NC-ND 3.0   —