AOP 面向切面编程

    用通俗的话来讲,就是在 Hyperf 里可以通过 切面(Aspect) 介入到由 hyperf/di 管理的任意类的任意方法的执行流程中去,从而改变或加强原方法的功能,这就是 AOP。

    • 切面(Aspect) 为对流程织入的定义类,包括要介入的目标,以及实现对原方法的修改加强处理

    每个 必须实现 Hyperf\Di\Aop\AroundInterface 接口,并提供 public$classes$annotations 属性,为了方便使用,我们可以通过继承 Hyperf\Di\Aop\AbstractAspect 来简化定义过程,我们通过代码来描述一下。

    每个 切面(Aspect) 必须定义 注解或在 config/autoload/aspects.php 内配置均可发挥作用。

    所有被 AOP 影响的类,都会在 ./runtime/container/proxy/ 文件夹内生成对应的 代理类缓存,服务启动时,如果类所对应的代理类缓存存在,则不会重新生成直接使用缓存,即使 Aspect 的切入范围发生了改变。不存在时,则会自动重新生成新的代理类缓存。

    在部署生产环境时,我们可能会希望 Hyperf 提前将所有代理类提前生成,而不是使用时动态的生成,可以通过 命令来生成所有代理类,该命令会忽视现有的代理类缓存,全部重新生成。