优化MethodMatcher

master
linlei 2024-04-11 14:06:51 +08:00
parent 2ce5a5225a
commit 2645dc4976
1 changed files with 17 additions and 42 deletions

View File

@ -1,35 +1,24 @@
## MethodMatcher
- [MethodMatcher](#MethodMatcher)
- [一、基本信息](#一基本信息)
- [二、知识储备](#二知识储备)
- [三、基本描述](#三基本描述)
- [四、主要功能](#四主要功能)
- [五、接口源码](#五接口源码)
- [六、主要实现](#六主要实现)
- [七、最佳实践](#七最佳实践)
- [八、与其他组件的关系](#八与其他组件的关系)
- [九、常见问题](#九常见问题)
- [MethodMatcher](#methodmatcher)
- [一、基本信息](#一基本信息)
- [二、基本描述](#二基本描述)
- [三、主要功能](#三主要功能)
- [四、接口源码](#四接口源码)
- [五、主要实现](#五主要实现)
- [六、最佳实践](#六最佳实践)
- [七、源码分析](#七源码分析)
- [八、常见问题](#八常见问题)
### 一、基本信息
✒️ **作者** - Lex 📝 **博客** - [掘金](https://juejin.cn/user/4251135018533068/posts) 📚 **源码地址** - [github](https://github.com/xuchengsheng/spring-reading)
### 二、知识储备
1. **切点表达式语言**
+ 了解切点表达式语言如Spring AOP中常用的AspectJ切点表达式语言。掌握如何使用切点表达式来描述切点以及如何使用通配符、逻辑运算符等进行切点匹配。
2. **设计模式**
+ 了解设计模式特别是代理模式和策略模式对于理解Spring AOP中的代理对象和不同类型的MethodMatcher实现很有帮助。
### 三、基本描述
### 二、基本描述
`MethodMatcher` 接口是Spring AOP中的一个关键接口用于判断一个给定的方法是否匹配指定的切点表达式。它定义了方法匹配的规则和逻辑我们可以通过实现这个接口来自定义方法匹配的行为从而实现针对特定方法的切面逻辑的拦截和执行。
### 、主要功能
### 三、主要功能
1. **方法匹配**
@ -51,7 +40,7 @@
+ `MethodMatcher` 接口的设计应该具有良好的扩展性,我们可以根据实际需求自定义方法匹配的规则和逻辑,以满足不同的业务场景和需求。
### 、接口源码
### 、接口源码
`MethodMatcher` 接口用于检查目标方法是否符合通知的条件。它支持静态匹配和动态匹配两种方式,静态匹配在编译时确定,而动态匹配在运行时根据方法参数和先前通知的执行情况进行判断。
@ -123,7 +112,7 @@ public interface MethodMatcher {
}
```
### 、主要实现
### 、主要实现
1. **AnnotationMethodMatcher**
@ -145,7 +134,7 @@ public interface MethodMatcher {
+ 这个类使用 AspectJ 表达式语言来创建切点它允许我们使用更加灵活和强大的语法来定义切点。AspectJ 表达式支持更多的特性,包括访问方法参数、异常类型等。
### 、最佳实践
### 、最佳实践
使用不同类型的方法匹配器来检查特定方法是否满足不同的条件。其中,使用 AnnotationMethodMatcher 来检查方法是否具有特定的注解;使用 AspectJExpressionPointcut 基于 AspectJ 表达式来匹配方法;使用 NameMatchMethodPointcut 基于方法名称来匹配方法;使用 JdkRegexpMethodPointcut 基于正则表达式来匹配方法。
@ -175,25 +164,11 @@ public class MethodMatcherDemo {
}
```
### 八、与其他组件的关系
### 七、源码分析
1. **Pointcut**
暂无
+ `MethodMatcher` 接口是 `Pointcut` 接口的一部分,用于确定哪些方法应该被拦截和应用额外逻辑的地方。`MethodMatcher` 接口的实现类通常被用来定义切点的匹配条件。
2. **Advisor**
+ `MethodMatcher` 接口常常用于创建切面通知器,它决定了切面通知器应该在哪些方法上生效。切面通知器通常会关联一个切点,而切点又会使用 `MethodMatcher` 来确定哪些方法被匹配。
3. **Advice**
+ 通知是在切点上执行的附加逻辑。`MethodMatcher` 可以用来限制通知应该应用在哪些方法上。这意味着只有当方法匹配 `MethodMatcher` 的条件时,通知才会被触发。
4. **ProxyFactory**
+ 当我们使用 Spring AOP 创建代理时,`MethodMatcher` 通常用于确定哪些方法需要被代理,并且哪些方法应该被排除在代理之外。
### 九、常见问题
### 八、常见问题
1. **如何编写自定义的 MethodMatcher 实现?**