1.切面介绍
面向切面编程是一种编程范式,它作为OOP面向对象编程的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、权限控制、缓存控制、日志打印等等。AOP把软件的功能模块分为两个部分:核心关注点和横切关注点。业务处理的主要功能为核心关注点,而非核心、需要拓展的功能为横切关注点。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点进行分离,使用切面有以下好处:
-
集中处理某一关注点/横切逻辑
-
可以很方便的添加/删除关注点
-
侵入性少,增强代码可读性及可维护性 因此当想打印请求日志时很容易想到切面,对控制层代码0侵入
2.切面的使用【基于注解】
@Aspect => 声明该类为一个注解类
切点注解:
@Pointcut => 定义一个切点,可以简化代码
通知注解:
@Before => 在切点之前执行代码
@After => 在切点之后执行代码
@AfterReturning => 切点返回内容后执行代码,可以对切点的返回值进行封装
@AfterThrowing => 切点抛出异常后执行
@Around => 环绕,在切点前后执行代码
测试:http://localhost:8085/permission/check
RequestLogAspect的执行顺序
@Around--@Before--目标方法--@After--@Around
切面执行顺序:
异常
- 虽然Around功能强大,但通常需要在线程安全的环境下使用。因此,如果使用普通的Before、AfterReturing增强方法就可以解决的事情,就没有必要使用Around增强处理了。
参考1:
https://blog.csdn.net/lmx125254/article/details/84398412
参考2:
https://mp.weixin.qq.com/s?__biz=MzI1NDQ3MjQxNA==&mid=2247493888&idx=1&sn=53d33575a4281ff182b53cc53bbf021a