首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
AOP引入:OOP存在哪些局限性?
AOP常见使用场景
AOP概念:Aspect、Join Point和Advice等术语应该如何理解?
Java AOP设计模式:代理、判断和拦截器模式
Java AOP代理模式(Proxy):Java静态代理和动态代理的区别是什么?
Java AOP判断模式(Predicate):如何筛选Join Point?
Java AOP拦截器模式(Interceptor):拦截执行分别代表什么?
Spring AOP 功能概述:核心特性、编程模型和使用限制
Spring AOP编程模型:注解驱动、XML配置驱动和底层API
Spring AOP设计目标:Spring AOP与 AOP框架之间的关系是竞争还是互补?
Spring AOP Advice类型:Spring AOP丰富了哪些AOP Advice呢?
Spring AOP代理实现:为什么Spring Framework选择三种不同AOP实现?
JDK动态代理:为什么Proxy.newProxyInstance会生成新的字节码?
CGLIB动态代理:为什么Java动态代理无法满足AOP的需要?
AspectJ代理代理:为什么Spring推荐AspectJ注解?
AspectJ基础:Aspect、Join Points、Pointcuts和Advice语法和特性
AspectJ注解驱动:注解能完全替代AspectJ语言吗?
Spring核心基础:《小马哥讲Spring核心编程思想》还记得多少?
@AspectJ注解驱动
编程方式创建 @AspectJ代理
XML配置驱动 - 创建AOP代理
标准代理工厂API - ProxyFactory
@AspectJ Pointcut指令与表达式:为什么Spring只能有限支持?
XML配置Pointcut
API实现Pointcut
@AspectJ拦截动作:@Around与@Pointcut有区别吗?
XML配置Around Advice
API实现Around Advice
@AspectJ前置动作:@Before与@Around谁优先级执行?
XML配置Before Advice
API实现Before Advice
@AspectJ后置动作 - 三种After Advice之间的关系?
XML配置三种After Advice
API实现三种After Advice
自动动态代理
替换TargetSource
Spring AOP API整体设计
接入点接口 - Joinpoint
Joinpoint条件接口 - Pointcut
Pointcut操作 - ComposablePointcut
Pointcut便利实现
Pointcut AspectJ实现 - AspectJExpressionPointcut
Joinpoint执行动作接口 - Advice
Joinpoint Before Advice标准实现
Joinpoint Before Advice AspectJ实现
Joinpoint After Advice标准实现
Joinpoint After Advice AspectJ实现
Advice容器接口 - Advisor
Pointcut与Advice连接器 - PointcutAdvisor
Introduction与Advice连接器 - IntroductionAdvisor
Advisor的Interceptor适配器 - AdvisorAdapter
AdvisorAdapter实现
AOP代理接口 - AopProxy
AopProxy工厂接口与实现
JDK AopProxy实现 - JdkDynamicAopProxy
当前位置:
首页>>
技术小册>>
Spring AOP 编程思想(上)
小册名称:Spring AOP 编程思想(上)
### 章节:Advisor的Interceptor适配器 - AdvisorAdapter 在深入探讨Spring AOP(面向切面编程)的广阔世界中,`Advisor`作为连接切点(Pointcut)与增强(Advice)的桥梁,扮演着至关重要的角色。而`AdvisorAdapter`,作为`Advisor`与Spring AOP框架内部拦截机制之间的适配器,更是这一体系中不可或缺的一环。本章将详细解析`AdvisorAdapter`的工作机制、设计原理及其在Spring AOP中的应用,帮助读者深入理解Spring AOP如何灵活地将业务逻辑与横切关注点(如日志、事务管理等)分离并织入。 #### 一、引言 在Spring AOP中,`Advisor`是一个接口,它封装了切点(Pointcut)和增强(Advice)的信息,使得开发者可以以一种声明式的方式定义切面。然而,`Advisor`接口本身并不直接提供执行增强的逻辑,这一职责通常由`Advice`接口的实现类承担。由于Spring AOP支持多种类型的增强(如前置增强、后置增强、环绕增强等),且每种增强类型在Spring AOP框架内部的处理方式有所不同,因此需要一个机制来桥接`Advisor`与实际的增强执行逻辑——这就是`AdvisorAdapter`的角色。 #### 二、AdvisorAdapter的作用 `AdvisorAdapter`的主要作用是将`Advisor`中定义的增强(Advice)适配为Spring AOP框架能够识别的拦截器(Interceptor)形式。在Spring AOP中,拦截器是实际执行增强逻辑的关键组件,它们被织入到目标方法的调用链中,在方法执行前、后或异常时执行特定的逻辑。 由于`Advisor`接口允许不同类型的`Advice`(如`MethodBeforeAdvice`、`AfterReturningAdvice`、`ThrowsAdvice`、`MethodInterceptor`等),而Spring AOP框架内部处理这些增强时需要统一的接口进行交互,因此`AdvisorAdapter`起到了一个“适配器”的作用,它能够将不同类型的`Advice`转换为统一的拦截器形式,以便Spring AOP框架能够统一处理。 #### 三、AdvisorAdapter的设计与实现 ##### 1. AdvisorAdapterRegistry 在Spring AOP中,`AdvisorAdapterRegistry`负责管理`AdvisorAdapter`的注册与查找。当Spring AOP框架需要为某个`Advisor`找到对应的拦截器时,它会查询`AdvisorAdapterRegistry`,看是否有适合的`AdvisorAdapter`能够处理该`Advisor`。`AdvisorAdapterRegistry`通过维护一个包含多种`AdvisorAdapter`的列表,实现了对不同类型`Advice`的适配支持。 ##### 2. AdvisorAdapter的实现 Spring AOP为不同类型的`Advice`提供了相应的`AdvisorAdapter`实现。例如: - **MethodBeforeAdvisorAdapter**:用于适配实现了`MethodBeforeAdvice`接口的增强,该类增强会在目标方法执行前执行。 - **AfterReturningAdviceAdapter**:用于适配实现了`AfterReturningAdvice`接口的增强,该类增强会在目标方法正常执行完毕后执行。 - **ThrowsAdviceAdapter**:用于适配实现了`ThrowsAdvice`接口的增强,该类增强会在目标方法抛出异常时执行。 - **MethodInterceptorAdapter**(虽然不直接称为Adapter,但起类似作用):对于实现了`MethodInterceptor`接口的增强,它本身就是一种拦截器,可以直接被Spring AOP框架使用,无需额外适配。 每个`AdvisorAdapter`都实现了特定的逻辑,将`Advice`转换为Spring AOP框架可识别的拦截器。这通常涉及到创建一个内部拦截器,该拦截器在调用时,会触发相应的`Advice`逻辑。 #### 四、AdvisorAdapter的工作流程 当Spring AOP框架需要为某个连接点(JoinPoint)执行增强时,它会执行以下步骤: 1. **查询Advisor**:首先,根据当前连接点的信息(如方法签名、类信息等),查询匹配的`Advisor`。 2. **查找AdvisorAdapter**:对于每个匹配的`Advisor`,Spring AOP框架会查询`AdvisorAdapterRegistry`,找到能够适配该`Advisor`中`Advice`类型的`AdvisorAdapter`。 3. **创建拦截器链**:使用找到的`AdvisorAdapter`将`Advice`转换为拦截器,并将这些拦截器按照一定顺序组合成拦截器链。 4. **执行拦截器链**:在目标方法调用前后,执行拦截器链中的每个拦截器,从而触发相应的增强逻辑。 #### 五、AdvisorAdapter的应用场景与优势 `AdvisorAdapter`的设计使得Spring AOP能够灵活地支持多种类型的增强,而不必为每种增强类型都编写专门的逻辑来处理。这种设计不仅简化了Spring AOP框架的实现,也提高了其可扩展性。开发者只需关注业务逻辑和增强的实现,而无需关心这些增强是如何被Spring AOP框架识别和执行的。 此外,`AdvisorAdapter`的引入还使得Spring AOP能够与其他AOP框架(如AspectJ)的增强类型进行互操作,从而提高了Spring AOP的兼容性和灵活性。 #### 六、总结 `AdvisorAdapter`作为Spring AOP中连接`Advisor`与拦截器的重要桥梁,通过其灵活的适配机制,使得Spring AOP能够支持多种类型的增强,并且能够以一种统一的方式处理这些增强。通过深入理解`AdvisorAdapter`的工作原理和设计思想,读者可以更加深入地掌握Spring AOP的核心机制,进而在实际项目中更加灵活地应用AOP技术来解决横切关注点的问题。 本章通过介绍`AdvisorAdapter`的作用、设计与实现、工作流程以及应用场景与优势,旨在帮助读者建立对Spring AOP中`AdvisorAdapter`的全面认识,为后续深入学习Spring AOP打下坚实的基础。
上一篇:
Introduction与Advice连接器 - IntroductionAdvisor
下一篇:
AdvisorAdapter实现
该分类下的相关小册推荐:
Java语言基础4-数组详解
Mybatis合辑4-Mybatis缓存机制
Java必知必会-Maven高级
Java语言基础13-类的加载和反射
Java语言基础12-网络编程
Mybatis合辑3-Mybatis动态SQL
Java语言基础8-Java多线程
经典设计模式Java版
Java语言基础14-枚举和注解
Java语言基础16-JDK8 新特性
Java面试指南
Java高并发秒杀入门与实战