概述
本文介绍aop相关的3个概念
Pointcut( 切入点)
要对 哪些方法 注入代码
依赖
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
execution 表达式
提示:还有 within 表达式,详见 链接
execution( * *..*.*(..) )
能够匹配上面表达式的方法,就会被注入代码
说明:
| 表达式的部分 | 说明 |
|---|---|
第1个* |
表示 任意返回值 (包括void) |
*.. |
表示当前 包 及其 子包 |
第3个* |
表示任意类名 |
第4个* |
表示任意方法名 |
| 最后 .. | 任意形参 |
例子
所有
public方法都会注入代码execution(public * *(..))所有以
set开头的公有方法都会注入代码execution(* set*(..))IUserService接口下的所有方法都会注入代码execution(* top.malaoshi.service.IUserService.*(..))top.malaoshi.service包下的所有方法都会注入代码execution(* top.malaoshi.service.*.*(..))top.malaoshi.service包及其子包下的所有方法都会注入代码execution(* top.malaoshi.service..*.*(..))
Advice( 通知)
根据通知类型,在目标方法的 执行之前、执行之后 ,可以执行 其他代码
通知的类型:
- Before:在目标方法被 调用之前 执行 其他代码
- AfterReturning:在目标方法 正常完成后 执行 其他代码(抛出异常时不执行此通知)
- AfterThrowing:抛出异常后 执行 其他代码(正常执行时不执行此通知)
- After:在目标方法完成之后 执行 其他代码,无论 成功完成 还是 抛出异常
- Around:环绕通知,在目标方法的 执行之前、执行之后 ,可以执行 其他代码
功能最为强大,可以实现上面4个类型的功能
通知类型有相对应的注解
Aspect( 切面)
是 切入点 和 通知 的结合
