龙岗网站建设哪家技术好,网线插座接法,佛山网红打卡地,网站制作大型公司注解 (hyperf.wiki)
AOP 面向切面编程 (hyperf.wiki)
切面
定义切面(Aspect)
根据官方教程定义一个切面。可以指定类、方法、参数和注解上生效。
?php
namespace App\Aspect;use App\Service\SomeClass;
use App\Annotation\SomeAnnotation;
use Hyperf\Di\Annotatio…注解 (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_types1);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}) */