当前位置: 首页 > article >正文

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参数的方法。

http://www.kler.cn/a/380177.html

相关文章:

  • 时间序列预测(十八)——实现配置管理和扩展命令行参数解析器
  • Java之包,抽象类,接口
  • Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
  • 浅谈QT中Tab键的切换逻辑
  • Vue3版本的uniapp项目运行至鸿蒙系统
  • C#如何封装将函数封装为接口dll?
  • Pwn学习笔记(10)--UAF
  • ElementUI中el-table双击单元格显示输入框
  • 基于SSM+小程序的高校寻物平台管理系统(失物1)
  • k8s简单的指令以及图解
  • 论文阅读:Computational Long Exposure Mobile Photography (二)
  • Spring3(代理模式 Spring1案例补充 Aop 面试题)
  • 使用commitizen用于项目git提交规范管理
  • HarmonyOS第一课 07 从网络获取数据-习题
  • 【python GUI编码入门-14】创建动态更新的Tkinter GUI应用
  • 【算法】【优选算法】双指针(下)
  • 了解bootstrap改造asp.net core MVC的样式模板
  • 【湖南-常德】《市级信息化建设项目初步设计方案编制规范和支出预算编制标准(试行)》-省市费用标准解读系列05
  • ElMessageBox 内容自定义
  • 嵌入式常用功能之通讯协议1--IIC
  • org.springframework.boot:type=Admin,name=SpringApplication异常
  • Chrome与傲游浏览器性能与功能的深度对比
  • Flutter 13 网络层框架架构设计,支持dio等框架。
  • DAYWEB69 攻防-Java 安全JWT 攻防Swagger 自动化算法签名密匙Druid 泄漏
  • burp靶场-Remote code execution via web shell upload
  • Spring Boot解决 406 错误之返回对象缺少Getter/Setter方法引发的问题