美文网首页
hf3.0 AOP切面

hf3.0 AOP切面

作者: geeooooz | 来源:发表于2023-07-11 15:32 被阅读0次

    官方文档:https://hyperf.wiki/3.0/#/zh-cn/aop
    51博客的示例:https://blog.51cto.com/u_15064646/3929186
    切入类注解和类方法注解 这块没有研究

    切面类
    <?php
    //app/Aspect/FooAspect
    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
    {
        //1.第一种方法
        // 要切入的类或 Trait,可以多个,亦可通过 :: 标识到具体的某个方法,通过 * 可以模糊匹配
        public array $classes = [
            SomeClass::class,//代表请求这个service 中所有方法都会检测到
            'App\Service\SomeClass::someMethod',//固定方法
            'App\Service\SomeClass::*Method',//模糊匹配方法
        ];
    
        // 这个注解先不考虑了 注解是一大章 用到的不多
        // 要切入的注解,具体切入的还是使用了这些注解的类,仅可切入类注解和类方法注解
    //    public array $annotations = [
    //        SomeAnnotation::class,
    //    ];
    
        //2.使用注解  选一种即可
        #[
            Aspect(
                classes: [
                SomeClass::class,
                "App\Service\SomeClass::someMethod",
                "App\Service\SomeClass::*Method"
            ],
                annotations: [
                    SomeAnnotation::class
                ]
            )
        ]
    
    
        public function process(ProceedingJoinPoint $proceedingJoinPoint)
        {
            // 切面切入后,执行对应的方法会由此来负责
            // $proceedingJoinPoint 为连接点,通过该类的 process() 方法调用原方法并获得结果
            // 在调用前进行某些处理
            $result = $proceedingJoinPoint->process();
            var_dump($result);
            // 在调用后进行某些处理
            return '结果处理'.PHP_EOL.$result .PHP_EOL. '结果处理'.PHP_EOL;
        }
    
    }
    
    
    检测的service类
    <?php
    
    
    namespace App\Service;
    
    
    class SomeClass
    {
        public function someMethod(){
            return 1;
        }
        public function something(){
            return 'test';
        }
        public function aMetho(){
            return 2;
        }
    }
    
    demo控制器,用于访问测试
    <?php
    
    
    namespace App\Controller;
    
    use App\Service\SomeClass;
    use Hyperf\HttpServer\Annotation\Controller;
    use Hyperf\HttpServer\Annotation\GetMapping;
    
    #[Controller(prefix: "demo")]
    class Demo extends AbstractController
    {
        #[Inject]
    
        #[GetMapping(path: "demo")]
        public function demo(){
            $some = new SomeClass();
            return $some->someMethod();
        }
    
    
    }
    

    相关文章

      网友评论

          本文标题:hf3.0 AOP切面

          本文链接:https://www.haomeiwen.com/subject/bfxuudtx.html