优化Advisor
parent
404bbea4e1
commit
9a393aaf1e
|
@ -1,39 +1,24 @@
|
||||||
## Advisor
|
## Advisor
|
||||||
|
|
||||||
- [Advisor](#Advisor)
|
- [Advisor](#advisor)
|
||||||
- [一、基本信息](#一基本信息)
|
- [一、基本信息](#一基本信息)
|
||||||
- [二、知识储备](#二知识储备)
|
- [二、基本描述](#二基本描述)
|
||||||
- [三、基本描述](#三基本描述)
|
- [三、主要功能](#三主要功能)
|
||||||
- [四、主要功能](#四主要功能)
|
- [四、接口源码](#四接口源码)
|
||||||
- [五、接口源码](#五接口源码)
|
- [五、主要实现](#五主要实现)
|
||||||
- [六、主要实现](#六主要实现)
|
- [六、最佳实践](#六最佳实践)
|
||||||
- [七、最佳实践](#七最佳实践)
|
- [七、源码分析](#七源码分析)
|
||||||
- [八、与其他组件的关系](#八与其他组件的关系)
|
- [八、常见问题](#八常见问题)
|
||||||
- [九、常见问题](#九常见问题)
|
|
||||||
|
|
||||||
### 一、基本信息
|
### 一、基本信息
|
||||||
|
|
||||||
✒️ **作者** - 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. **Spring AOP**
|
|
||||||
|
|
||||||
+ 理解Spring框架中的AOP模块,包括如何配置和使用Spring AOP,以及与AspectJ的集成。
|
|
||||||
|
|
||||||
2. **通知(Advice)**
|
|
||||||
|
|
||||||
+ 了解通知是在AOP中的一个核心概念,它是在连接点(join point)上执行的代码,常用的通知类型有前置通知、后置通知、环绕通知等。
|
|
||||||
|
|
||||||
3. **切点(Pointcut)**
|
|
||||||
|
|
||||||
+ 理解切点是在AOP中确定何时应该应用通知的一种机制,切点定义了在应用程序中哪些地方应该执行通知。
|
|
||||||
|
|
||||||
### 三、基本描述
|
|
||||||
|
|
||||||
`Advisor`接口是Spring框架中的一个关键接口,用于将切点(Pointcut)和通知(Advice)组合起来,以便在AOP(面向切面编程)中定义何时、何地以及如何应用横切关注点。
|
`Advisor`接口是Spring框架中的一个关键接口,用于将切点(Pointcut)和通知(Advice)组合起来,以便在AOP(面向切面编程)中定义何时、何地以及如何应用横切关注点。
|
||||||
|
|
||||||
### 四、主要功能
|
### 三、主要功能
|
||||||
|
|
||||||
1. **组合切点和通知**
|
1. **组合切点和通知**
|
||||||
|
|
||||||
|
@ -51,7 +36,7 @@
|
||||||
|
|
||||||
+ Advisor接口是面向切面编程(AOP)的核心组件之一,它允许我们在不改变业务逻辑的情况下,通过切面来管理横切关注点,从而提高代码的模块化和可维护性。
|
+ Advisor接口是面向切面编程(AOP)的核心组件之一,它允许我们在不改变业务逻辑的情况下,通过切面来管理横切关注点,从而提高代码的模块化和可维护性。
|
||||||
|
|
||||||
### 五、接口源码
|
### 四、接口源码
|
||||||
|
|
||||||
`Advisor`接口是Spring框架中的一个基础接口,用于持有AOP通知(在连接点执行的操作)和确定通知适用性的过滤器(例如切点)。该接口定义了获取通知部分的方法`getAdvice()`,以及确定通知是否与特定实例相关联的方法`isPerInstance()`。同时,该接口还提供了一个常量`EMPTY_ADVICE`,用作当未配置适当通知时的占位符。在Spring AOP中,Advisor接口允许支持不同类型的通知,例如拦截器、前置通知、异常通知等,并且并非所有通知都需要使用拦截来实现。
|
`Advisor`接口是Spring框架中的一个基础接口,用于持有AOP通知(在连接点执行的操作)和确定通知适用性的过滤器(例如切点)。该接口定义了获取通知部分的方法`getAdvice()`,以及确定通知是否与特定实例相关联的方法`isPerInstance()`。同时,该接口还提供了一个常量`EMPTY_ADVICE`,用作当未配置适当通知时的占位符。在Spring AOP中,Advisor接口允许支持不同类型的通知,例如拦截器、前置通知、异常通知等,并且并非所有通知都需要使用拦截来实现。
|
||||||
|
|
||||||
|
@ -97,7 +82,7 @@ public interface Advisor {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 六、主要实现
|
### 五、主要实现
|
||||||
|
|
||||||
1. **RegexpMethodPointcutAdvisor**
|
1. **RegexpMethodPointcutAdvisor**
|
||||||
|
|
||||||
|
@ -119,7 +104,7 @@ public interface Advisor {
|
||||||
|
|
||||||
+ 是Spring AOP中的一个特殊类型的Advisor实现,用于引入新的接口(或Mixin)到目标类中。它允许将新的接口实现引入到现有的目标类中,以扩展目标类的功能。通过`DefaultIntroductionAdvisor`,可以在不修改现有类的情况下,向其添加新的行为或功能,从而实现更好的代码复用和扩展性。
|
+ 是Spring AOP中的一个特殊类型的Advisor实现,用于引入新的接口(或Mixin)到目标类中。它允许将新的接口实现引入到现有的目标类中,以扩展目标类的功能。通过`DefaultIntroductionAdvisor`,可以在不修改现有类的情况下,向其添加新的行为或功能,从而实现更好的代码复用和扩展性。
|
||||||
|
|
||||||
### 七、最佳实践
|
### 六、最佳实践
|
||||||
|
|
||||||
使用Advisor来创建代理对象并应用切面逻辑。首先,我们创建了一个代理工厂`ProxyFactory`,并将目标对象`MyService`传递给它。然后,我们通过`proxyFactory.addAdvisor(new MyCustomAdvisor())`添加了一个自定义的Advisor,该Advisor定义了切点和通知。接着,我们通过`proxyFactory.getProxy()`获取了代理对象`MyService`。最后,我们调用了代理对象的方法`proxy.foo()`和`proxy.bar()`。
|
使用Advisor来创建代理对象并应用切面逻辑。首先,我们创建了一个代理工厂`ProxyFactory`,并将目标对象`MyService`传递给它。然后,我们通过`proxyFactory.addAdvisor(new MyCustomAdvisor())`添加了一个自定义的Advisor,该Advisor定义了切点和通知。接着,我们通过`proxyFactory.getProxy()`获取了代理对象`MyService`。最后,我们调用了代理对象的方法`proxy.foo()`和`proxy.bar()`。
|
||||||
|
|
||||||
|
@ -214,25 +199,11 @@ Executing foo method
|
||||||
Executing bar method
|
Executing bar method
|
||||||
```
|
```
|
||||||
|
|
||||||
### 八、与其他组件的关系
|
### 七、源码分析
|
||||||
|
|
||||||
1. **Advice**
|
暂无
|
||||||
|
|
||||||
+ Advisor接口持有一个通知(Advice)对象,通知定义了在连接点(Join Point)上要执行的逻辑,如在方法执行前后、抛出异常时等。
|
### 八、常见问题
|
||||||
|
|
||||||
2. **Pointcut**
|
|
||||||
|
|
||||||
+ Advisor接口使用切点来确定通知应该在哪些连接点上执行。切点定义了一个匹配规则,用于匹配连接点(例如方法执行)。
|
|
||||||
|
|
||||||
3. **ProxyFactory**
|
|
||||||
|
|
||||||
+ 在Spring AOP中,Advisor通常与代理工厂一起使用,以创建代理对象并将切面逻辑应用于目标对象。代理工厂负责创建代理对象,并将Advisor与目标对象进行关联。
|
|
||||||
|
|
||||||
4. **Aspect**
|
|
||||||
|
|
||||||
+ Advisor是实现切面的一种方式。切面是一个横切关注点的模块化单元,它由切点和通知组成。Advisor提供了一种将切点和通知结合在一起的机制,因此它是切面的基本组成部分。
|
|
||||||
|
|
||||||
### 九、常见问题
|
|
||||||
|
|
||||||
1. **切点定义错误**
|
1. **切点定义错误**
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue