> 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代碼后不生效,應先清除對應緩存才行