本文主要是介绍Hyperf AOP 和 注解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
注解 (hyperf.wiki)
AOP 面向切面编程 (hyperf.wiki)
切面
定义切面(Aspect)
根据官方教程定义一个切面。可以指定类、方法、参数和注解上生效。
<?php
namespace App\Aspect;use App\Service\SomeClass;
use App\Annotation\SomeAnnotation;
use Hyperf\Di\Annotation\Aspect;
use Hyperf\Di\Aop\AbstractAspect;
use Hyperf\Di\Aop\ProceedingJoinPoint;/*** @Aspect*/
class FooAspect extends AbstractAspect
{// 要切入的类或 Trait,可以多个,亦可通过 :: 标识到具体的某个方法,通过 * 可以模糊匹配public $classes = [SomeClass::class,'App\Service\SomeClass::someMethod','App\Service\SomeClass::*Method',];// 要切入的注解,具体切入的还是使用了这些注解的类,仅可切入类注解和类方法注解public $annotations = [SomeAnnotation::class,];public function process(ProceedingJoinPoint $proceedingJoinPoint){// 切面切入后,执行对应的方法会由此来负责// $proceedingJoinPoint 为连接点,通过该类的 process() 方法调用原方法并获得结果// 在调用前进行某些处理$result = $proceedingJoinPoint->process();// 在调用后进行某些处理return $result;}
}
在例子里面,$proceedingJoinPoint 有以下方法
getAnnotationMetadata
获取注解里的内容
getArguments
获取切入方法的参数
getReflectMethod
获取反射出来的方法
$method = $proceedingJoinPoint->getReflectMethod()
返回是一个数组,分别是类名和方法名。
getInstance
获取hyperf 实例
注解
<?phpdeclare(strict_types=1);namespace App\Annotation;use Hyperf\Di\Annotation\AbstractAnnotation;/*** @Annotation* @Target("ALL")*/
class Api extends AbstractAnnotation
{}
注解一共有 3 种应用对象,分别是 类
、类方法
和 类属性
。
其中 @Target
有如下参数:
-
METHOD
注解允许定义在类方法上 -
PROPERTY
注解允许定义在类属性上 -
CLASS
注解允许定义在类上 -
ALL
注解允许定义在任何地方
多个时:
/**
* @Annotation
* @Target({"METHOD", "CLASS"})
*/
这篇关于Hyperf AOP 和 注解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!