切点表达式

定义

切点表达式是用于匹配连接点(如方法调用、构造函数执行等)的一种表达式语言。通过切点表达式,AOP 框架能够判断在哪些特定的代码位置插入横切关注点的逻辑。

组成部分

1.切点签名:用于指定方法的名称、类、包路径等信息,用来匹配特定的连接点。

image-20240918214111310

image-20240918214132545

2.逻辑操作符:可以通过 &&、||、! 等逻辑操作符组合多个切点条件。

结构形式

image-20240918214027405

切点表达式通常由包名、类名、方法名等元素组成,配合通配符和条件限制,灵活地筛选出程序中需要织入的连接点。例如:execution(* com.example.service..(..))。

分类

1.执行表达式(execution):最常用的切点表达式,匹配方法执行的连接点。例如,匹配某个包下所有类的所有方法。
2.调用表达式(call):匹配方法调用的连接点。
3.初始化表达式(init):匹配类构造函数的调用。
4.字段获取/设置表达式(get/set):匹配属性的读取和写入操作。

目的

通过切点表达式,可以灵活控制切面应用的范围,确保横切关注点只在需要的地方生效,避免不必要的性能开销和代码复杂性。

基本原理

切点表达式就像一个过滤器,通过模式匹配的方式筛选出符合条件的连接点,在这些连接点上执行切面逻辑。

使用方法

①定义切面

在切面中使用 @Pointcut 注解或在配置文件中定义切点表达式。

②指定切入点

使用 execution、within 等表达式来指定切入点。例如:
execution(* com.example.service..(..)):匹配 com.example.service 包下的所有类中的所有方法。
within(com.example.service..*):匹配 com.example.service 包及其子包中的所有类。

③逻辑操作符

可以通过 &&、||、! 组合多个切点条件,形成更复杂的匹配逻辑。

达式

定义

切点表达式是用于匹配连接点(如方法调用、构造函数执行等)的一种表达式语言。通过切点表达式,AOP 框架能够判断在哪些特定的代码位置插入横切关注点的逻辑。

组成部分

1.切点签名:用于指定方法的名称、类、包路径等信息,用来匹配特定的连接点。

image-20240918214111310

image-20240918214132545

2.逻辑操作符:可以通过 &&、||、! 等逻辑操作符组合多个切点条件。

结构形式

image-20240918214027405

切点表达式通常由包名、类名、方法名等元素组成,配合通配符和条件限制,灵活地筛选出程序中需要织入的连接点。例如:execution(* com.example.service..(..))。

分类

1.执行表达式(execution):最常用的切点表达式,匹配方法执行的连接点。例如,匹配某个包下所有类的所有方法。
2.调用表达式(call):匹配方法调用的连接点。
3.初始化表达式(init):匹配类构造函数的调用。
4.字段获取/设置表达式(get/set):匹配属性的读取和写入操作。

目的

通过切点表达式,可以灵活控制切面应用的范围,确保横切关注点只在需要的地方生效,避免不必要的性能开销和代码复杂性。

基本原理

切点表达式就像一个过滤器,通过模式匹配的方式筛选出符合条件的连接点,在这些连接点上执行切面逻辑。

使用方法

①定义切面

在切面中使用 @Pointcut 注解或在配置文件中定义切点表达式。

②指定切入点

使用 execution、within 等表达式来指定切入点。例如:
execution(* com.example.service..(..)):匹配 com.example.service 包下的所有类中的所有方法。
within(com.example.service..*):匹配 com.example.service 包及其子包中的所有类。

③逻辑操作符

可以通过 &&、||、! 组合多个切点条件,形成更复杂的匹配逻辑。