# 概念
AOP(aspect oriented Programming)面向切面编程,一种编程范式。
# 作用
在不惊动原始设计的基础上为方法进行功能增强
# 核心概念
- 代理(proxy)SpringAOP 的核心本质是采用代理模式实现的
- 连接点(joinproint)在 SpringAOP 中,理解为任意方法的执行
- 切入点(pointcut)匹配连接点的式子,也是具有共性功能的方法描述
- 通知(advice)若干个方法的共性功能,在切入点处执行,最终体现为一个方法
- 切面(aspect)描述通知和切入点的对应关系
- 目标对象(target)被代理的原始对象成为目标对象
# 切入表达式标准格式
动作关键字(访问修饰符 返回值 包名,类 / 接口名,方法名(参数)异常名)
1 | execution(* com.包名。service.*Servive.*(..)) |
切入点表达式描述通配符
- 作用:用于快速描述,范围描述
- *:匹任意字符串(常用)
- .. : 匹配多个连续的任意符号(常用)
- +:匹配子类类型
# 切入点表达式书写技巧
按照标准规范开发
查询操作的返回值建议使用 * 匹配
减少使用.. 的形式描述包
对接口进行描述,使用 * 表示模块名,例如 userService 的匹配描述为
*
Service方法名书写保留动词,例如 get , 使用 * 表示名词,例如 getById 匹配描述为 getBy
*
参数根据实际情况灵活调整
# 通知类型
前置通知
后置通知
# 环绕通知(重点)
# 环绕通知依赖于形参 ProccedingJoinPoint 才能实现对原始方法的调用
# 环绕通知可以隔离原始方法的调用执行
# 环绕通知放回置设置为 Object 类型
# 环绕通知中可以对原始方法调用过程中出现的异常进行处理
放回后通知
抛出异常后通知
# 获取切入点方法的参数
JoinPoint 适用于前置、后置、放回后,抛出异常后通知,设置为第一个方法的形参
ProccedJoinPoint: 适用于环绕通知
# 获取切点方法返回值
返回后通知
环绕通知
# 获取切入点方法运行异常信息
抛出异常后通知
环绕通知