切面编程

面向切面编程(AOP)框架是 Swoft 框架的关键组件之一。面向方面编程需要将程序逻辑分解为称为所谓关注的不同部分。跨越应用程序多个点的功能称为横切关注点,这些横切关注点在概念上与应用程序的业务逻辑分离。有很多常见的很好的例子,例如日志记录,审计,声明式事务,安全性,缓存等等。OOP中模块化的关键单元是类,而在AOP中,模块化的单元是方面。依赖注入可帮助您将应用程序对象与其他对象解耦,而AOP可帮助您将交叉关注与其影响的对象分离。AOP就像Perl,.NET,Java等编程语言中的触发器。Swoft AOP 组件提供拦截器来拦截应用程序。例如,执行方法时,可以在方法执行之前或之后添加额外的功能。

AOP术语

在我们开始使用AOP之前,让我们熟悉AOP的概念和术语。这些术语并非特定于 Swoft,而是与 AOP 相关。

Aspect

其实就是共有功能的实现。如日志切面、权限切面、事务切面等。在实际应用中通常是一个存放共有功能实现的普通PHP类(切面类),之所以能被AOP容器识别成切面,是在配置中指定的。

Join point

就是程序在运行过程中能够插入切面的地点。例如,方法调用、异常抛出或字段修改等,但Swoft只支持方法级的连接点。

Advice

是切面的具体实现。以 目标方法 (要被代理的方法)为参照点,根据放置的地方不同,可分为前置通知(Before)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)与环绕通知(Around)5种。在实际应用中通常是指向切面类中的一个方法,具体属于哪类通知,同样是在配置中指定的。

Pointcut

用于定义通知应该切入到哪些连接点上。不同的通知通常需要切入到不同的连接点上,这种精准的匹配是由切入点的正则表达式来定义的。

Target object

目标被一个或多个方面提供建议。该对象将始终是代理对象,也称为建议对象。