欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > Spring学习笔记_24——切入点表达式

Spring学习笔记_24——切入点表达式

2025/6/6 19:02:25 来源:https://blog.csdn.net/LuckyLay/article/details/143504667  浏览:    关键词:Spring学习笔记_24——切入点表达式

切入点表达式

1. 介绍

在Spring框架中,切入点(Pointcut)表达式用于指定哪些方法应该被拦截。这通常是在创建AOP(面向切面编程)时使用,用于定义切面(Aspect)中的哪些连接点(Join point)是感兴趣的。

切入点表达式(Pointcut Expression)是AOP(面向切面编程)的一个核心概念,它用于定义哪些方法将被增强(即添加额外的行为)。

2. 分类

方法执行:execution(MethodSignature)
方法调用:call(MethodSignature)
构造器执行:execution(ConstructorSignature)
构造器调用:call(ConstructorSignature)
类初始化:staticinitialization(TypeSignature)
属性读操作:get(FieldSignature)
属性写操作:set(FieldSignature)
例外处理执行:handler(TypeSignature)
对象初始化:initialization(ConstructorSignature)
对象预先初始化:preinitialization(ConstructorSignature)

3. 切入点表达式

  • excution:这是最常用的切入点表达式,用于匹配方法的执行。
  • execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? (parameter-pattern)* throws-pattern?)
  • modifiers-pattern:匹配方法的访问修饰符,如publicprivate等。
  • ret-type-pattern:匹配返回值类型。
  • declaring-type-pattern:匹配声明方法的类。
  • parameter-pattern:匹配方法参数。
  • throws-pattern:匹配方法可能抛出的异常类型。
  • within:匹配在指定类或包中的连接点
  • 例如:within(com.example..*) 匹配com.example包及其子包中的所有类的方法。
  • this: 匹配目标对象是指定类型的连接点
  • 例如:this(com.example.MyClass) 匹配目标对象是MyClass类型的方法。
  • target:匹配调用连接点目标对象是指定类型的连接点
  • 例如:target(com.example.MyClass) 匹配调用对象是MyClass类型的方法
  • args:匹配方法参数是指定类型的连接点
  • 例如:args(java.lang.String) 匹配方法参数列表中包含String类型参数的方法
  • @within:用于匹配带有指定注解的类(指的是这个类上面有指定的注解)
  • 例如:@within(com.example.annotation.MyAnnotation):匹配所有带有MyAnnotation注解的类中的方法。
  • @args:用于匹配参数中带有指定注解的方法
  • 例如:@args(com.example.annotation.MyAnnotation),匹配方法参数类型上拥有MyAnnotation注解的方法调用。
  • @target:匹配目标对象有指定注解的连接点
  • 例如:@target(org.springframework.stereotype.Service) 匹配目标对象上有@Service注解的方法。
  • @annotation:匹配方法或方法参数上有指定注解的连接点
  • 例如:@annotation(org.springframework.web.bind.annotation.RequestMapping) 匹配方法上有@RequestMapping注解的方法
  • bean:Spring独有的方法,用于匹配指定的bean的方法。
  • 例如:bean(userService):匹配名为userService的bean的所有方法

3. 通配符

  • *:匹配任何数量的字符。
  • ..:匹配任何数量的类或接口,包括子包。
  • +:表示指定类和子类(主要用于within表达式)。

4. 组合表达式

切入点表达式可以通过逻辑运算符(如&&||!)进行组合,以实现更复杂的匹配规则。

  • 例如:execution(* com.example.service.*.*(..)) && args(String):匹配com.example.service包及其子包下所有带有一个String参数的方法。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词