parent
0ada3c6eb5
commit
2413795b78
|
@ -8,12 +8,6 @@
|
|||
- [五、主要实现](#五主要实现)
|
||||
- [六、类关系图](#六类关系图)
|
||||
- [七、最佳实践](#七最佳实践)
|
||||
- [MyCustomPointcut](#mycustompointcut)
|
||||
- [AspectJExpressionPointcut](#aspectjexpressionpointcut)
|
||||
- [AnnotationMatchingPointcut](#annotationmatchingpointcut)
|
||||
- [NameMatchMethodPointcut](#namematchmethodpointcut)
|
||||
- [JdkRegexpMethodPointcut](#jdkregexpmethodpointcut)
|
||||
|
||||
|
||||
### 一、基本信息
|
||||
|
||||
|
@ -149,7 +143,7 @@ TruePointcut ..> Pointcut
|
|||
|
||||
### 七、最佳实践
|
||||
|
||||
#### MyCustomPointcut
|
||||
**MyCustomPointcut**
|
||||
|
||||
使用自定义的 `Pointcut` 对象 `MyCustomPointcut`。在 `customPointcut` 方法中,我们创建了 `MyCustomPointcut` 的实例,并通过 `showMatchesLog` 方法展示了其对类和方法的匹配情况。最后,我们通过调用 `showMatchesLog` 方法来检查 `MyCustomPointcut` 对象对目标类 `MyService` 中的方法的匹配情况,并输出匹配结果。
|
||||
|
||||
|
@ -254,7 +248,7 @@ MethodMatcher MyService getAge = true
|
|||
MethodMatcher MyService setName = false
|
||||
```
|
||||
|
||||
#### AspectJExpressionPointcut
|
||||
**AspectJExpressionPointcut**
|
||||
|
||||
使用 `AspectJExpressionPointcut` 创建一个基于 AspectJ 表达式的切入点。在 `aspectJExpressionPointcut` 方法中,我们创建了 `AspectJExpressionPointcut` 的实例,并设置了 AspectJ 表达式 `"execution(* com.xcs.spring.MyService.get*())"`,该表达式匹配了 `com.xcs.spring.MyService` 类中以 `get` 开头的所有方法。最后,我们通过调用 `showMatchesLog` 方法来检查 `AspectJExpressionPointcut` 对象对指定类中的方法的匹配情况,并输出匹配结果。
|
||||
|
||||
|
@ -285,7 +279,7 @@ MethodMatcher MyService getAge = true
|
|||
MethodMatcher MyService setName = false
|
||||
```
|
||||
|
||||
#### AnnotationMatchingPointcut
|
||||
**AnnotationMatchingPointcut**
|
||||
|
||||
使用 `AnnotationMatchingPointcut` 创建一个基于注解匹配的切入点。在 `annotationMatchingPointcut` 方法中,我们创建了 `AnnotationMatchingPointcut` 的实例,并指定了类级别注解 `MyClassAnnotation` 和方法级别注解 `MyMethodAnnotation`,同时设置了不检查继承的方法。最后,我们通过调用 `showMatchesLog` 方法来检查 `AnnotationMatchingPointcut` 对象对指定类中的方法的匹配情况,并输出匹配结果。
|
||||
|
||||
|
@ -315,7 +309,7 @@ MethodMatcher MyService getAge = false
|
|||
MethodMatcher MyService setName = true
|
||||
```
|
||||
|
||||
#### NameMatchMethodPointcut
|
||||
**NameMatchMethodPointcut**
|
||||
|
||||
使用 `NameMatchMethodPointcut` 创建一个基于方法名匹配的切入点。在 `nameMatchMethodPointcut` 方法中,我们创建了 `NameMatchMethodPointcut` 的实例,并添加了要匹配的方法名 `getAge`。然后,我们通过调用 `showMatchesLog` 方法来检查 `NameMatchMethodPointcut` 对象对指定类中的方法的匹配情况,并输出匹配结果。
|
||||
|
||||
|
@ -346,7 +340,7 @@ MethodMatcher MyService getAge = true
|
|||
MethodMatcher MyService setName = false
|
||||
```
|
||||
|
||||
#### JdkRegexpMethodPointcut
|
||||
**JdkRegexpMethodPointcut**
|
||||
|
||||
使用 `JdkRegexpMethodPointcut` 创建一个基于 JDK 正则表达式匹配的切入点。在 `jdkRegexpMethodPointcut` 方法中,我们创建了 `JdkRegexpMethodPointcut` 的实例,并设置了正则表达式模式 `".*set.*"`,该模式匹配了所有包含 "set" 字符串的方法名。然后,我们通过调用 `showMatchesLog` 方法来检查 `JdkRegexpMethodPointcut` 对象对指定类中的方法的匹配情况,并输出匹配结果。
|
||||
|
||||
|
|
|
@ -7,8 +7,6 @@
|
|||
- [四、类关系图](#四类关系图)
|
||||
- [五、最佳实践](#五最佳实践)
|
||||
- [六、源码分析](#六源码分析)
|
||||
- [初始化阶段](#初始化阶段)
|
||||
- [创建代理阶段](#创建代理阶段)
|
||||
|
||||
|
||||
### 一、基本信息
|
||||
|
@ -103,7 +101,7 @@ proxy = class com.xcs.spring.MyService$$EnhancerBySpringCGLIB$$d9bdf44b
|
|||
|
||||
### 六、源码分析
|
||||
|
||||
#### 初始化阶段
|
||||
**初始化阶段**
|
||||
|
||||
在`org.springframework.aop.framework.ProxyCreatorSupport#ProxyCreatorSupport()`方法中,`ProxyCreatorSupport`类是`ProxyFactory`类的父类,因此当初始化`ProxyFactory`时,`ProxyCreatorSupport`也会跟着初始化,确保在创建代理对象时能够利用`ProxyCreatorSupport`的功能。在构造函数中,它初始化了`aopProxyFactory`成员变量,将其设置为一个`DefaultAopProxyFactory`对象,用于后续创建AOP代理对象。
|
||||
|
||||
|
@ -160,7 +158,7 @@ public void setInterfaces(Class<?>... interfaces) {
|
|||
}
|
||||
```
|
||||
|
||||
#### 创建代理阶段
|
||||
**创建代理阶段**
|
||||
|
||||
在`org.springframework.aop.framework.ProxyFactory#getProxy()`方法中,根据工厂中的配置创建一个新的代理对象。可以重复调用此方法,根据已添加或删除的接口以及添加或移除的拦截器的不同,其效果会有所变化。该方法会使用默认的类加载器,通常是线程上下文类加载器(如果需要代理创建时)。最终返回创建的代理对象。
|
||||
|
||||
|
|
Loading…
Reference in New Issue