spring aop Pointcut切入点、Advice通知、Aspect切面

概述

本文介绍aop相关的3个概念

Pointcut( 切入点)

要对 哪些方法 注入代码

依赖

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.5</version>
</dependency>

execution 表达式

提示:还有 within 表达式,详见 链接

execution( * *..*.*(..) )

能够匹配上面表达式的方法,就会被注入代码

说明:

表达式的部分 说明
第1个* 表示 任意返回值 (包括void)
*.. 表示当前 包 及其 子包
第3个* 表示任意类名
第4个* 表示任意方法名
最后 .. 任意形参

例子

  1. 所有 public 方法都会注入代码

    execution(public * *(..))
    
  2. 所有以 set 开头的公有方法都会注入代码

    execution(* set*(..))
    
  3. IUserService 接口下的所有方法都会注入代码

    execution(* top.malaoshi.service.IUserService.*(..))
    
  4. top.malaoshi.service 包下的所有方法都会注入代码

    execution(* top.malaoshi.service.*.*(..))
    
  5. top.malaoshi.service 包及其子包下的所有方法都会注入代码

    execution(* top.malaoshi.service..*.*(..))
    

Advice( 通知)

根据通知类型,在目标方法的 执行之前、执行之后 ,可以执行 其他代码

通知的类型:

  • Before:在目标方法被 调用之前 执行 其他代码
  • AfterReturning:在目标方法 正常完成后 执行 其他代码(抛出异常时不执行此通知)
  • AfterThrowing:抛出异常后 执行 其他代码(正常执行时不执行此通知)
  • After:在目标方法完成之后 执行 其他代码,无论 成功完成 还是 抛出异常
  • Around:环绕通知,在目标方法的 执行之前、执行之后 ,可以执行 其他代码
    功能最为强大,可以实现上面4个类型的功能

通知类型有相对应的注解

Aspect( 切面)

是 切入点 和 通知 的结合


原文出处:/show_1IX9SEIqQGH.html