hyperf aop 面向切面的理解和举例
这是一个IndexController控制器中的一个普通方法,注意,只看这个方法的话,是看不出任何特别之处的。

定义一个切面

接口返回:

日志记录:
[2021-06-21 17:22:26] app.INFO: aop调用前
[2021-06-21 17:22:26] app.INFO: 进入 IndexController 的aop方法
[2021-06-21 17:22:26] app.INFO: aop调用后
总结和理解:
由于我之前从来没接触过AOP,理解得可能不对,欢迎纠正。
能看出这个切面的功能,很像勾子函数。
在执行方法前,做一些处理,类似前置钩子。
在执行方法后,做一些处理,类似后置钩子。
个人觉得它的优点是“无侵入”,完全不需要修改控制器中的方法。
但缺点恰好也是无侵入吧?比如我发现了本例中IndexController中的aop方法有bug,需要处理。但其实这个bug是由于切面中的代码引起的(即IndexAspect 的 process方法)。如果我不知道有个切面在影响它,就很难定位问题了。
应用场景:
网上查了一些资料,aop主要应用增加非业务类的功能。比如,要给多个方法记录日志,使用aop就很方便了。就不需要去给每个方法,加一行类似 addLog() 的代码。

从上图可以看出对于日志记录,性能监控,异常处理这样的非核心功能,单独被抽取出来,与业务代码分离,横切在核心业务代码之上
版权声明:本文为junzi528原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。