当前位置: 首页 > article >正文

5. AOP

一、AOP是什么?

  • 面向切面编程,通过预编译方式或运行期动态代理实现程序功能的统一维护的一种技术。
  • AOP在字面上与OOP很相似,但设计思想在目标上有着本质的差异。
  • OOP是针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。
  • 而AOP则是针对业务处理过程中的黄页进行提取,它所面对的是处理过程中的某个步骤或阶段,以获取逻辑过程中各部分之间低耦合性的隔离效果。

二、 Hyperf里的AOP

  • 只需要理解一个概念,即Aspect(切面)
  • Aspect可以切入任意类或任意注解类
  • 被切入的类必须由DI管理
  • 相对于其它框架实现的AOP功能的使用方式,进一步简化了AOP的使用,不做过细的划分(如,Before, After, AfterReturning, AfterThrowing),仅存在环绕(Around)一种通过的形式。
  • Hyperf的AOP是基于DI实现的
  • 必须使用的是Hyperf的DI组件,即hyperf/di
  • 必须通过DI创建的对象才能使AOP生效,直接new不行
  • 必须当代理类缓存文件不存在时,才会重新生成代理类

三、AOP的应用场景

  • 参数校验、日志、无侵入埋点、安全控制、性能统计、事务处理、异常处理、缓存、无侵入监控、资源池、连接池管理等。

四、Aspect示例

1. 切入服务类

  • 作用于所有引入该服务类的位置
<?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 {
   
  // 要切入的类,可以多个,也可通过 :: 标识到具体的某个方法,通过 * 可以模糊匹配
  public $classes = [
    

http://www.kler.cn/news/363315.html

相关文章:

  • 为什么k8s不支持docker-kubernetes
  • CRMEB标准版Mysql修改sql_mode
  • Scala的trait特质
  • 你不常用的 FileReader 能干什么?
  • 2024下半年软考机考模拟系统已开放!小伙伴们速速练起来
  • Matlab学习01-矩阵
  • 口含烟贴纸设计公司哪家好?
  • docker之redis安装(项目部署准备)
  • 从 0 开发一个系统
  • 渗透测试+oneforall+nmap+zenmap+7kbscan+dic+pkav+御剑+netcat
  • 吴伟仁《英国文学史及选读》第一二册课后答案PDF
  • 基于vue框架的的高校设备信息管理系统的设计与实现tx6d7(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • Python | Leetcode Python题解之第496题下一个更大元素I
  • NCU-机器学习-作业4:基于XGboost的收入分类预测
  • 我记不住的那些表达式求值
  • 决策树与随机森林在分类问题中的应用
  • 【C++】——多态(上)
  • Java 监听器示例(非界面)
  • 华为ICT题库-大数据部分
  • 【国潮来袭】华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布:鸿蒙诞生以来最大升级,碰一碰、小艺圈选重磅上线
  • 大模型干货 | 提示词工程十大技巧:释放大模型潜力的最佳工具
  • SpringMVC源码-异常处理机制
  • 找到连续赢 K 场比赛的第一位玩家
  • YoloV8改进策略:注意力改进|DeBiFormer,可变形双级路由注意力|引入DeBiLevelRoutingAttention注意力模块(全网首发)
  • Qt初识及其环境搭建
  • 无人机初识及应用概览