首页
技术小册
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 编程思想(上)
### 章节:Advice容器接口 - Advisor 在深入探讨Spring AOP(面向切面编程)的精髓时,`Advisor`(顾问)作为Advice(通知)的容器接口,扮演着至关重要的角色。它不仅是连接Pointcut(切入点)与Advice(通知)的桥梁,更是Spring AOP框架中灵活配置和动态织入行为的基石。本章将详细解析Advisor的概念、类型、工作原理及其在Spring AOP框架中的应用,旨在帮助读者深入理解并有效利用这一强大机制。 #### 一、Advisor概述 在Spring AOP中,`Advisor`是一个关键的接口,它封装了切点(Pointcut)和通知(Advice)的信息,使得Spring框架能够在运行时根据这些信息决定何时(即哪个切点被匹配时)以及如何(即执行哪种类型的通知)对目标方法进行增强。简而言之,`Advisor`是Spring AOP中用于定义横切关注点(cross-cutting concerns)的一种方式,它使得业务逻辑与这些关注点之间的解耦成为可能。 #### 二、Advisor的类型 Spring AOP提供了多种类型的`Advisor`,以适应不同的应用场景和需求。主要的Advisor类型包括: 1. **静态Advisor**:这类Advisor在应用程序启动时就已经完全确定,其切点和通知不会改变。它们通常通过配置文件或注解的方式静态定义。 2. **动态Advisor**:与静态Advisor相对,动态Advisor的切点或通知可能在运行时根据某些条件动态确定。这提供了更高的灵活性,但也可能增加复杂性和性能开销。 3. **IntroductionAdvisor**:这是一种特殊的Advisor,它用于向目标对象引入新的接口或字段,从而在不修改原有类代码的情况下扩展其功能。 4. **PointcutAdvisor**:这是最常见的一种Advisor,它直接封装了一个Pointcut和一个Advice,是最基本也是最常用的Advisor实现。 #### 三、Advisor的工作原理 `Advisor`的工作原理主要依赖于Spring AOP的代理机制。当Spring容器启动时,它会检查所有的Bean定义,识别出那些配置了AOP增强的Bean。对于这些Bean,Spring会为其创建代理对象(默认情况下是JDK动态代理或CGLIB代理),并将Advisor中的Advice织入到这些代理中。 具体步骤如下: 1. **切点匹配**:当代理对象接收到方法调用时,Spring AOP框架会首先检查是否有Advisor的切点与该调用匹配。这一步是通过Pointcut的匹配算法完成的,它决定了哪些方法调用需要被拦截。 2. **通知执行**:如果找到匹配的切点,Spring AOP将按照Advisor中定义的Advice类型(如前置通知、后置通知、环绕通知等)执行相应的逻辑。这些逻辑可以在目标方法执行前后执行,甚至可以完全替代目标方法的执行。 3. **返回结果**:根据Advice的类型,执行完通知逻辑后,可能会继续执行目标方法(对于环绕通知,这可能发生在通知逻辑之前或之后),并将结果返回给调用者。 #### 四、Advisor的配置与使用 在Spring中配置和使用Advisor主要有以下几种方式: 1. **XML配置**:通过Spring的XML配置文件,可以显式地定义Advisor、Pointcut和Advice,并将它们组合起来。这种方式虽然灵活,但配置相对繁琐,特别是在大型项目中。 ```xml <aop:config> <aop:advisor advice-ref="myAdvice" pointcut="execution(* com.example.service.*.*(..))"/> </aop:config> ``` 2. **注解配置**:Spring AOP支持通过注解来简化配置。例如,使用`@Aspect`注解定义一个切面类,然后通过`@Before`、`@After`等注解来定义通知,并使用`@Pointcut`注解来定义切点表达式。这种方式使得AOP的配置更加直观和易于管理。 ```java @Aspect public class MyAspect { @Pointcut("execution(* com.example.service.*.*(..))") public void serviceLayerExecution() {} @Before("serviceLayerExecution()") public void beforeServiceMethod() { // 前置通知逻辑 } } ``` 3. **编程式API**:虽然不常用,但Spring AOP也提供了编程式API,允许开发者在代码中直接创建和配置Advisor。这种方式提供了最大的灵活性,但通常不推荐在业务逻辑中使用,因为它会使代码更加复杂且难以维护。 #### 五、最佳实践与注意事项 1. **保持关注点分离**:在使用Advisor时,应始终遵循关注点分离的原则,确保业务逻辑与横切关注点之间的清晰界限。 2. **合理使用切点表达式**:切点表达式是Advisor配置中的关键部分,它决定了哪些方法将被拦截。因此,应仔细设计切点表达式,避免不必要的拦截,以提高性能。 3. **注意性能影响**:虽然AOP提供了强大的功能,但它也可能对性能产生一定影响。特别是在大量使用动态代理和复杂切点表达式的情况下,应密切关注性能变化,并适时进行优化。 4. **文档与测试**:由于AOP的透明性,增加了系统的复杂性和调试难度。因此,在使用AOP时,应充分编写文档和测试用例,以确保系统的可维护性和稳定性。 #### 六、总结 `Advisor`作为Spring AOP框架中的核心接口之一,为开发者提供了一种灵活而强大的方式来定义和配置横切关注点。通过深入理解Advisor的概念、类型、工作原理以及配置和使用方法,我们可以更加高效地利用Spring AOP框架来构建松耦合、易维护的应用程序。在未来的Spring AOP编程实践中,掌握Advisor的使用将是我们不可或缺的技能之一。
上一篇:
Joinpoint After Advice AspectJ实现
下一篇:
Pointcut与Advice连接器 - PointcutAdvisor
该分类下的相关小册推荐:
Mybatis合辑2-Mybatis映射文件
手把手带你学习SpringBoot-零基础到实战
Java语言基础11-Java中的泛型
Spring AOP 编程思想(下)
Java并发编程
Mybatis合辑5-注解、扩展、SQL构建
Java语言基础10-Java中的集合
Java并发编程实战
Java语言基础15-单元测试和日志技术
java源码学习笔记
Java语言基础9-常用API和常见算法
Java语言基础7-Java中的异常