当前位置:  首页>> 技术小册>> 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. 代理创建:调用AdvisedSupportcreateAopProxy()方法,该方法根据配置选择合适的代理策略,并创建代理对象。
  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代理。这提供了更好的兼容性和灵活性。
  • 自定义通知与顾问:开发者可以通过实现AdviceAdvisor接口来创建自定义的通知或顾问,然后将它们添加到AdvisedSupport中,以实现复杂的AOP逻辑。
  • 多实例代理AdvisedSupport支持为不同的目标对象创建独立的代理实例,这使得每个代理对象都可以拥有自己独立的AOP配置。

六、总结

AdvisedSupport作为Spring AOP配置管理器的核心组件,通过管理通知、顾问、目标对象等关键元素,为AOP代理的创建和管理提供了强大的支持。它与AopProxyFactory的紧密协作,使得Spring AOP能够在不修改源代码的情况下,灵活地实现对目标对象的增强。通过深入理解AdvisedSupport的工作原理和高级特性,开发者可以更加灵活地运用Spring AOP来解决实际问题,提升应用的模块化、可维护性和可扩展性。


该分类下的相关小册推荐: