ClassFilter优化

MethodMatcher优化
master
linlei 2024-04-23 16:20:46 +08:00
parent 0150a68452
commit 3fdf1ca8df
2 changed files with 65 additions and 11 deletions

View File

@ -6,8 +6,9 @@
- [三、主要功能](#三主要功能)
- [四、接口源码](#四接口源码)
- [五、主要实现](#五主要实现)
- [六、最佳实践](#六最佳实践)
- [七、常见问题](#七常见问题)
- [六、类关系图](#六类关系图)
- [七、最佳实践](#七最佳实践)
- [八、常见问题](#八常见问题)
### 一、基本信息
@ -87,7 +88,30 @@ public interface ClassFilter {
+ 主要用于基于 AspectJ 表达式匹配目标类。
### 六、最佳实践
### 六、类关系图
~~~mermaid
classDiagram
direction BT
class AnnotationClassFilter
class AspectJExpressionPointcut
class ClassFilter {
<<Interface>>
}
class RootClassFilter
class TypePatternClassFilter
AnnotationClassFilter ..> ClassFilter
AspectJExpressionPointcut ..> ClassFilter
RootClassFilter ..> ClassFilter
TypePatternClassFilter ..> ClassFilter
~~~
### 七、最佳实践
使用不同类型的类过滤器在 Spring AOP 中的使用方式。我们创建了四种不同的类过滤器实例,并测试它们是否匹配了特定的类。通过打印输出结果,展示了每个类过滤器的匹配情况,从而说明了它们在过滤目标类方面的作用。
@ -123,7 +147,7 @@ RootClassFilter 是否匹配 MySubService 的根类true
AspectJExpressionPointcut 是否匹配 MyService 类true
```
### 、常见问题
### 、常见问题
1. **匹配准确性**

View File

@ -6,10 +6,11 @@
- [三、主要功能](#三主要功能)
- [四、接口源码](#四接口源码)
- [五、主要实现](#五主要实现)
- [六、最佳实践](#六最佳实践)
- [七、源码分析](#七源码分析)
- [六、类关系图](#六类关系图)
- [七、最佳实践](#七最佳实践)
- [八、常见问题](#八常见问题)
### 一、基本信息
✒️ **作者** - Lex 📝 **博客** - [掘金](https://juejin.cn/user/4251135018533068/posts) 📚 **源码地址** - [github](https://github.com/xuchengsheng/spring-reading)
@ -134,7 +135,40 @@ public interface MethodMatcher {
+ 这个类使用 AspectJ 表达式语言来创建切点它允许我们使用更加灵活和强大的语法来定义切点。AspectJ 表达式支持更多的特性,包括访问方法参数、异常类型等。
### 六、最佳实践
### 六、类关系图
~~~mermaid
classDiagram
direction BT
class AbstractRegexpMethodPointcut
class AnnotationMethodMatcher
class AspectJExpressionPointcut
class ControlFlowPointcut
class IntroductionAwareMethodMatcher {
<<Interface>>
}
class JdkRegexpMethodPointcut
class MethodMatcher {
<<Interface>>
}
class NameMatchMethodPointcut
class StaticMethodMatcher
class StaticMethodMatcherPointcut
AbstractRegexpMethodPointcut --> StaticMethodMatcherPointcut
AnnotationMethodMatcher --> StaticMethodMatcher
AspectJExpressionPointcut ..> IntroductionAwareMethodMatcher
ControlFlowPointcut ..> MethodMatcher
IntroductionAwareMethodMatcher --> MethodMatcher
JdkRegexpMethodPointcut --> AbstractRegexpMethodPointcut
NameMatchMethodPointcut --> StaticMethodMatcherPointcut
StaticMethodMatcher ..> MethodMatcher
StaticMethodMatcherPointcut --> StaticMethodMatcher
~~~
### 七、最佳实践
使用不同类型的方法匹配器来检查特定方法是否满足不同的条件。其中,使用 AnnotationMethodMatcher 来检查方法是否具有特定的注解;使用 AspectJExpressionPointcut 基于 AspectJ 表达式来匹配方法;使用 NameMatchMethodPointcut 基于方法名称来匹配方法;使用 JdkRegexpMethodPointcut 基于正则表达式来匹配方法。
@ -164,10 +198,6 @@ public class MethodMatcherDemo {
}
```
### 七、源码分析
暂无
### 八、常见问题
1. **如何编写自定义的 MethodMatcher 实现?**