优化Pointcut

master
linlei 2024-04-11 14:10:27 +08:00
parent 2645dc4976
commit 404bbea4e1
1 changed files with 16 additions and 40 deletions

View File

@ -2,42 +2,28 @@
- [Pointcut](#pointcut) - [Pointcut](#pointcut)
- [一、基本信息](#一基本信息) - [一、基本信息](#一基本信息)
- [二、知识储备](#二知识储备) - [二、基本描述](#二基本描述)
- [三、基本描述](#三基本描述) - [三、主要功能](#三主要功能)
- [四、主要功能](#四主要功能) - [四、接口源码](#四接口源码)
- [五、接口源码](#五接口源码) - [五、主要实现](#五主要实现)
- [六、主要实现](#六主要实现) - [六、最佳实践](#六最佳实践)
- [七、最佳实践](#七最佳实践)
- [自定义Pointcut](#自定义pointcut) - [自定义Pointcut](#自定义pointcut)
- [AspectJExpressionPointcut](#aspectjexpressionpointcut) - [AspectJExpressionPointcut](#aspectjexpressionpointcut)
- [AnnotationMatchingPointcut](#annotationmatchingpointcut) - [AnnotationMatchingPointcut](#annotationmatchingpointcut)
- [NameMatchMethodPointcut](#namematchmethodpointcut) - [NameMatchMethodPointcut](#namematchmethodpointcut)
- [八、与其他组件的关系](#八与其他组件的关系) - [七、源码分析](#七源码分析)
- [九、常见问题](#九常见问题) - [八、常见问题](#八常见问题)
### 一、基本信息 ### 一、基本信息
✒️ **作者** - Lex 📝 **博客** - [掘金](https://juejin.cn/user/4251135018533068/posts) 📚 **源码地址** - [github](https://github.com/xuchengsheng/spring-reading) ✒️ **作者** - Lex 📝 **博客** - [掘金](https://juejin.cn/user/4251135018533068/posts) 📚 **源码地址** - [github](https://github.com/xuchengsheng/spring-reading)
### 二、知识储备 ### 二、基本描述
1. **AOP 概念**
+ 了解面向切面编程AOP的基本概念和原理包括切面、连接点、通知、切点等概念。理解 AOP 的作用和用途,以及它与传统的面向对象编程的区别。
2. **Spring AOP**
+ 熟悉 Spring 框架中的 AOP 实现方式,了解 Spring AOP 如何在运行时将切面织入到目标对象的方法中,以及它的工作原理。
3. **代理模式**
+ 了解代理模式的基本原理和实现方式,包括静态代理和动态代理。在 Spring AOP 中,代理对象负责拦截目标对象的方法调用,并在必要时应用切面逻辑。
### 三、基本描述
`Pointcut` 接口主要用于定义切入点即确定哪些方法应该被切面所影响。Pointcut 接口提供了匹配规则,以确定在哪些类的哪些方法上应用切面,以及在何种情况下应该应用切面。 `Pointcut` 接口主要用于定义切入点即确定哪些方法应该被切面所影响。Pointcut 接口提供了匹配规则,以确定在哪些类的哪些方法上应用切面,以及在何种情况下应该应用切面。
### 、主要功能 ### 三、主要功能
1. **定义切入点** 1. **定义切入点**
@ -55,7 +41,7 @@
+ `getMethodMatcher()` 方法用于获取一个 `MethodMatcher` 对象,该对象用于确定哪些方法应该被匹配。我们可以根据自己的需求自定义方法匹配逻辑。 + `getMethodMatcher()` 方法用于获取一个 `MethodMatcher` 对象,该对象用于确定哪些方法应该被匹配。我们可以根据自己的需求自定义方法匹配逻辑。
### 、接口源码 ### 、接口源码
`Pointcut`接口定义了 Spring AOP 中的切入点的核心抽象,由 `ClassFilter``MethodMatcher` 组成,分别用于确定哪些类和方法应该被匹配。通过这个接口,可以创建不同的切入点,并灵活地组合它们来定义复杂的切面。接口中还定义了一个常量 `TRUE`,代表始终匹配的切入点。 `Pointcut`接口定义了 Spring AOP 中的切入点的核心抽象,由 `ClassFilter``MethodMatcher` 组成,分别用于确定哪些类和方法应该被匹配。通过这个接口,可以创建不同的切入点,并灵活地组合它们来定义复杂的切面。接口中还定义了一个常量 `TRUE`,代表始终匹配的切入点。
@ -96,7 +82,7 @@ public interface Pointcut {
} }
``` ```
### 、主要实现 ### 、主要实现
1. **NameMatchMethodPointcut** 1. **NameMatchMethodPointcut**
@ -126,7 +112,7 @@ public interface Pointcut {
+ 用于基于注解匹配的切入点定义。它可以根据指定的注解类型匹配类或方法,并用于将通知应用于带有特定注解的目标对象的方法。 + 用于基于注解匹配的切入点定义。它可以根据指定的注解类型匹配类或方法,并用于将通知应用于带有特定注解的目标对象的方法。
### 、最佳实践 ### 、最佳实践
#### 自定义Pointcut #### 自定义Pointcut
@ -317,21 +303,11 @@ public class PointcutDemo {
} }
``` ```
### 八、与其他组件的关系 ### 七、源码分析
1. **Advisor** 暂无
+ Advisor 包含了切入点和通知,而切入点就是由 Pointcut 定义的。Advisor 使用 Pointcut 来确定在何处应该应用通知。 ### 八、常见问题
2. **切面Aspect**
+ 切面是一种横切关注点的模块化实现,其中包含了切入点和通知。切面通常将 Pointcut 与 Advice通知结合在一起定义了在何处和如何应用通知。
3. **Pointcut实现类**
+ `Pointcut` 接口是定义切入点的核心接口。Spring AOP 提供了多种实现了 `Pointcut` 接口的类,如 `NameMatchMethodPointcut`、`AspectJExpressionPointcut` 等,用于实现不同类型的切入点匹配规则。
### 九、常见问题
1. **切入点表达式定义错误** 1. **切入点表达式定义错误**