Spring AOP:面向切面编程的最佳实践 ( 四 )

6.切点表达式

Spring AOP(面向切面编程)使用切入点表达式来定义哪些连接点(join points)应该应用切面逻辑。

切入点表达式是一种灵活的方式来指定哪些方法调用、构造函数调用或其他类型的连接点应该触发通知(advice)的执行。

Spring AOP 支持多种类型的切入点表达式,最常用的是基于方法调用的表达式。

6.1.基本语法

Spring AOP 的切入点表达式通常使用 execution 函数来定义方法调用的切入点。基本形式如下:

execution(modifiers-pattern? ret-type-pattern declaring-class-pattern? name-pattern(param-pattern) throws-pattern?)

这里的各个部分解释如下:

  • modifiers-pattern?: 可选的修饰符模式,如 publicprotectedprivate*(任意)。
  • ret-type-pattern: 返回类型模式,如 intjava.lang.String*(任意)。
  • declaring-class-pattern?: 可选的声明类模式,如 com.example.*(包下的任何类)或 *(任意)。
  • name-pattern: 方法名模式,如 doSomething*(任意)。
  • param-pattern: 参数列表模式,如 (int, java.lang.String)*(..)(任意数量和类型的参数)。
  • throws-pattern?: 可选的异常模式,如 throws java.lang.Exception*(任意)。

6.2.示例

假设你有一个 BusinessService 类,其中包含 doSomething() 方法,下面是几个切入点表达式的例子:

  1. 匹配所有公共方法:
execution(public * com.example.BusinessService.*(..))
  1. 匹配 BusinessService 类中的所有 doSomething() 方法:
execution(* com.example.BusinessService.doSomething(..))
  1. 匹配所有 doSomething() 方法,无论在哪个类中:
execution(* *.doSomething(..))
  1. 匹配所有返回类型为 void 的方法:
execution(void *.*(..))
  1. 匹配所有带有两个参数的方法:
execution(* *.*(?, ?))
  1. 匹配所有带有两个字符串参数的方法:
execution(* *.*(java.lang.String, java.lang.String))
  1. 匹配所有带有 Exception 异常的方法:
execution(* *.*(..) throws java.lang.Exception)

6.3.其他类型的切入点

除了 execution 函数之外,Spring AOP 还支持以下类型的切入点表达式:

  • within: 匹配特定类的所有方法。

    within(com.example.BusinessService+)
    
  • this: 匹配代理对象的类型。

    this(com.example.BusinessService)
    
  • target: 匹配目标对象的类型。

    target(com.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值