多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
> AOP (面向切面编程):定义要切入的类或者方法 (普通类、注解类),加入切面额外的逻辑控制,主要用于日志记录、性能统计、安全控制、事务处理、异常处理等等。 ## 切面实现 ~~~ 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 { // 要切入的类,可以多个,亦可通过 :: 标识到具体的某个方法,通过 * 可以模糊匹配 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; } } ~~~ ## 代理类缓存 > 所有被 AOP 影响的类,都会在`./runtime/container/proxy/`文件夹内生成对应的`代理类缓存`,当如果更改了AOP代码后不生效,应先清除对应缓存才行