美文网首页
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();
    }


}

相关文章

  • 来自于宏的黑魔法 --- 简单实现面向切面编程

    Elixir Macro AOP 面向切面 宏 元编程 什么是 AOP (面向切面编程)? 面向切面编程 AOP(...

  • AOP

    AOP切面编程 AOP: Aspect Oriented Programming 面向切面编程 面向切面编程(也叫...

  • iOS AOP编程之路

    1. AOP简介 AOP: Aspect Oriented Programming 面向切面编程。 面向切面编程(...

  • Spring - AOP实现

    什么是AOP编程 AOP: Aspect Oriented Programming 面向切面编程。 面向切面编程(...

  • springboot aop

    面向切面编程 aop 全称 Aspect Oriented Programming ,面向切面,AOP主要实现的目...

  • AOP

    简介 AOP即面向切面编程纵向关系OOP与横向切面AOP对比AOP的实现AOP的优缺点AOP的目标是把这些功能集中...

  • Spring各个包功能详解

    org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 ...

  • iOS:AOP面向切片编程

    AOP简介AOP: Aspect Oriented Programming 面向切面编程。面向切面编程(也叫面向方...

  • 谈谈对Android上AspectJ使用的想法

    AOP是什么 概念:AOP是Aspect Oriented Programming的缩写,即『面向切面编程』;切面...

  • AOP编程简述

    iOS AOP (面向切面编程) AOP面向切面编程(也叫面向方面):Aspect Oriented Progra...

网友评论

      本文标题:hf3.0 AOP切面

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