Spring之AOP

[复制链接]
发表于 2025-9-14 06:30:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
什么是AOP

AOP:Aspect 0riented Programming(面向切面编程、面向方面编程),可简朴明白为就是面向特定方法编程。
场景:案例中部门业务方法运行较慢,定位实行耗时较长的接口,此时需要统计每一个业务方法的
实行耗时。
上风:
1.减少重复代码
2.代码无侵入
3.进步开发服从
4.维护方便

AOP焦点概念

毗连点:JoinPoint,可以被AOP控制的方法(暗含方法实行时的相干信息)
关照:Advice,指那些重复的逻辑,也就是共性功能(终极体现为一个方法)
切入点ointCut,匹配毗连点的条件,关照仅会在切入点方法实行时被应用
切面:Aspect,形貌关照与切入点的对应关系(关照+切入点)
目标对象:Target,关照所应用的对象


AOP实行流程


 关照范例

根据关照方法实行时机的差别,将关照范例分为以下常见的五类:
@Around:围绕关照,此注解标注的关照方法在目标方法前、后都被实行
@Before:前置关照,此注解标注的关照方法在目标方法前被实行
@After :后置关照,此注解标注的关照方法在目标方法后被实行,无论是否有非常都会实行返回后关照
@AfterReturning:此注解标注的关照方法在目标方法后被实行,有非常不会实行
@AfterThrowing :非常后关照,此注解标注的关照方法发生非常后实行
注意1:
@Around围绕关照需要自己调用 Proceeding]oinPoint.proceed()来让原始方法实行,其他关照不需要思量目标方法实行
 注意2:
@Around围绕关照方法的返回值,必须指定为0bject,来吸收原始方法的返回值。
@Pointcut

该注解的作用是将公共的切点表达式抽取出来,需要用到时引用该切点表达式即可

关照序次

当有多个切面的切入点都匹配到了目标方法,目标方法运行时,多个关照方法都会被实行。
实行序次: 
- 差别切面类中,默认按照切面类的类名字母排序目标
        - 方法前的关照方法:字母排名靠前的先实行目标
        - 方法后的关照方法:字母排名靠前的后实行
- 用 @0rder(数字)加在切面类上来控制序次
        - 目标方法前的关照方法:数字小的先实行
        - 目标方法后的关照方法:数字小的后实行
切入点表达式

先容:形貌切入点方法的一种表达式。
作用:用来决定项目中的哪些方法需要参加关照
常见情势:
1.execution(.):根据方法的签名来匹配
2.@annotation(.):根据注解匹配
- 紧张根据方法的返回值、包名、类名、方法名、方法参数等信息来匹配,语法为:

- 其中带 ?的体现可以省略的部门
        1.访问修饰符:可省略(好比:public、protected)
        2.包名.类名: 可省略
        3. throws 非常:可省略(注意是方法上声明抛出的非常,不是实际抛出的非常)
- 可以使用通配符形貌切入点
*:单个独立的任意符号,可以通配任意返回值、包名、类名、方法名、任意范例的一个参数,也可以通配包、类、方法名的一部门

..:多个一连的任意符号,可以通配任意层级的包,或任意范例、任意个数的参数

 注意1:
根据业务需要,可以使用 且(&&)、或()、非(!)来组合比力复杂的切入点表达式

切入点表达式-@annotation

@annotation 切入点表达式,用于匹配标识有特定注解的方法
 

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表