首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
CGLIB AopProxy实现 - CglibAopProxy
AopProxyFactory配置管理器 - AdvisedSupport
Advisor链工厂接口与实现 - AdvisorChainFactory
目标对象来源接口与实现 - TargetSource
代理对象创建基础类 - ProxyCreatorSupport
AdvisedSupport事件监听器 - AdvisedSupportListener
ProxyCreatorSupport标准实现 - ProxyFactory
ProxyCreatorSupport IoC容器实现 - ProxyFactoryBean
ProxyCreatorSupport AspectJ实现 - AspectJProxyFactory
IoC容器自动代理抽象 - AbstractAutoProxyCreator
IoC容器自动代理标准实现
IoC容器自动代理 AspectJ 实现 - AspectJAwareAdvisorAutoProxyCreator
AOP Infrastructure Bean接口 - AopInfrastructureBean
AOP上下文辅助类 - AopContext
代理工厂工具类 - AopProxyUtils
AOP工具类 - AopUtils
AspectJ Enable模块驱动实现 - @EnableAspectJAutoProxy
AspectJ XML配置驱动实现 -
AOP配置Schema-based 实现 -
Aspect Schema-based实现 -
Pointcut Schema-based实现 -
Around Advice Schema-based实现 -
Before Advice Schema-based实现 -
After Advice Schema-based实现 -
After Returning Advice Schema-based实现 -
After Throwing Advice Schema-based实现 -
Adviser Schema-based实现 -
Introduction Schema-based实现 -
作用域代理Schema-based实现 -
抽象工厂模式(Abstract factory)实现
构建器模式(Builder)实现
工厂方法模式(Factory method)实现
原型模式(Prototype)实现
单例模式(Singleton)实现
适配器模式(Adapter)实现
组合模式(Composite)实现
装饰器模式(Decorator)实现
享元模式(Flyweight)实现
代理模式(Proxy)实现
模板方法模式(Template Method)实现
责任链模式(Chain of Responsibility)实现
观察者模式(Observer)实现
策略模式(Strategy)实现
命令模式(Command)实现
状态模式(State)实现
Spring AOP在 Spring 事件(Events)
Spring AOP在Spring 事务(Transactions)理论基础
Spring AOP在Spring 事务(Transactions)源码分析
Spring AOP在Spring 缓存(Caching)
Spring AOP在Spring本地调度(Scheduling)
当前位置:
首页>>
技术小册>>
Spring AOP 编程思想(下)
小册名称:Spring AOP 编程思想(下)
### 章节:AopProxyFactory配置管理器 - AdvisedSupport 在深入探讨Spring AOP(面向切面编程)的高级特性时,`AopProxyFactory`配置管理器及其核心组件`AdvisedSupport`扮演着至关重要的角色。本章将详细解析`AdvisedSupport`类如何作为AOP配置的中心点,管理通知(Advice)、目标对象(Target Object)、切入点(Pointcut)等关键元素,以及它是如何与`AopProxyFactory`协同工作,以支持Spring AOP的灵活性和强大功能。 #### 一、引言 Spring AOP通过代理机制实现了对目标对象方法的增强,这一过程涉及多个组件的协同工作,其中`AdvisedSupport`是连接这些组件的桥梁。它不仅是AOP配置信息的载体,还负责在运行时动态地创建和管理代理对象。理解`AdvisedSupport`对于掌握Spring AOP的底层工作原理至关重要。 #### 二、AdvisedSupport类概述 `AdvisedSupport`类是Spring AOP框架中用于支持代理配置的核心类,它实现了`Advised`接口,并提供了丰富的API来管理通知(Advice)、顾问(Advisor)、目标对象等AOP相关元素。通过继承或组合`AdvisedSupport`,开发者可以方便地创建自定义的AOP配置管理器。 ##### 2.1 关键属性 - **target**:被代理的目标对象。 - **advisors**:包含所有配置的顾问(Advisor)的列表,每个顾问定义了何时(通过Pointcut)以及如何(通过Advice)对目标方法进行增强。 - **adviceList**:直接配置的通知(Advice)列表,这些通知不通过顾问定义,而是直接应用于代理对象。 - **targetSource**:目标源,用于获取目标对象。这允许更复杂的目标对象获取逻辑,如动态代理、懒加载等。 - **interceptorChainFactory**:拦截器链工厂,用于创建包含所有通知的拦截器链。 ##### 2.2 核心方法 - **getAdvisorsAndAdvised()**:返回配置的顾问列表和`AdvisedSupport`自身的引用,便于在配置过程中进行迭代和修改。 - **addAdvisor(Advisor advisor)**:向配置中添加一个顾问。 - **addAdvice(Advice advice)**:向配置中添加一个直接的通知,不通过顾问管理。 - **getTargetSource()** / **setTargetSource(TargetSource targetSource)**:获取或设置目标源。 - **createAopProxy()**:根据配置创建AOP代理对象。此方法通常被`AopProxyFactory`调用。 #### 三、AopProxyFactory与AdvisedSupport的协作 `AopProxyFactory`是创建AOP代理的工厂类,它利用`AdvisedSupport`提供的配置信息来生成具体的代理对象。这种协作机制使得Spring AOP能够在不修改源代码的情况下,通过简单的配置实现对目标对象的增强。 ##### 3.1 AopProxyFactory的角色 - **配置解析**:解析AOP配置,如XML配置、注解配置等,将配置信息转换为`AdvisedSupport`可以理解的格式。 - **代理创建**:基于`AdvisedSupport`中的配置信息,选择合适的代理策略(JDK动态代理或CGLIB代理)来创建代理对象。 - **代理管理**:管理代理对象的生命周期,包括创建、销毁等。 ##### 3.2 协作流程 1. **配置收集**:`AopProxyFactory`首先收集AOP配置信息,这可能来自XML配置文件、注解或Java代码。 2. **配置转换**:将收集到的配置信息转换为`AdvisedSupport`实例的配置。这可能包括添加顾问、通知、设置目标源等。 3. **代理创建**:调用`AdvisedSupport`的`createAopProxy()`方法,该方法根据配置选择合适的代理策略,并创建代理对象。 4. **代理返回**:`AopProxyFactory`将创建好的代理对象返回给调用者,调用者可以通过代理对象间接调用目标对象的方法,同时触发配置的增强逻辑。 #### 四、深入解析AdvisedSupport的工作机制 ##### 4.1 通知链的构建 `AdvisedSupport`通过`interceptorChainFactory`构建了一个包含所有通知的拦截器链。当代理对象的方法被调用时,这个拦截器链会被执行,依次触发每个通知的增强逻辑。 - **前置通知(Before Advice)**:在目标方法执行之前执行。 - **后置通知(After Returning Advice)**:在目标方法正常执行后执行。 - **异常通知(After Throwing Advice)**:在目标方法抛出异常时执行。 - **最终通知(After Advice)**:无论目标方法执行成功还是抛出异常,都会执行。 - **环绕通知(Around Advice)**:在目标方法执行前后都可以执行自定义逻辑,并决定是否继续执行目标方法。 ##### 4.2 目标对象的访问 `AdvisedSupport`通过`TargetSource`来管理目标对象的获取。这允许了更灵活的目标对象管理策略,比如懒加载、动态代理等。在代理方法执行时,`AdvisedSupport`首先通过`TargetSource`获取目标对象,然后调用目标对象的方法,并在此过程中应用配置的增强逻辑。 #### 五、高级特性与应用场景 - **动态代理与静态代理的选择**:`AdvisedSupport`通过`AopProxyFactory`的支持,可以根据目标对象的类型和配置自动选择JDK动态代理或CGLIB代理。这提供了更好的兼容性和灵活性。 - **自定义通知与顾问**:开发者可以通过实现`Advice`或`Advisor`接口来创建自定义的通知或顾问,然后将它们添加到`AdvisedSupport`中,以实现复杂的AOP逻辑。 - **多实例代理**:`AdvisedSupport`支持为不同的目标对象创建独立的代理实例,这使得每个代理对象都可以拥有自己独立的AOP配置。 #### 六、总结 `AdvisedSupport`作为Spring AOP配置管理器的核心组件,通过管理通知、顾问、目标对象等关键元素,为AOP代理的创建和管理提供了强大的支持。它与`AopProxyFactory`的紧密协作,使得Spring AOP能够在不修改源代码的情况下,灵活地实现对目标对象的增强。通过深入理解`AdvisedSupport`的工作原理和高级特性,开发者可以更加灵活地运用Spring AOP来解决实际问题,提升应用的模块化、可维护性和可扩展性。
上一篇:
CGLIB AopProxy实现 - CglibAopProxy
下一篇:
Advisor链工厂接口与实现 - AdvisorChainFactory
该分类下的相关小册推荐:
Java语言基础6-面向对象高级
Java语言基础15-单元测试和日志技术
Java语言基础7-Java中的异常
Java高并发秒杀入门与实战
Java语言基础12-网络编程
Mybatis合辑2-Mybatis映射文件
Java语言基础16-JDK8 新特性
Spring AOP 编程思想(上)
深入拆解 Java 虚拟机
Java语言基础2-运算符
Java语言基础4-数组详解
Mybatis合辑4-Mybatis缓存机制