spring源码系列-AOP的项目结构解析

本文详细介绍了Spring AOP的项目结构,包括aop包、aspectj包及其子包,阐述了各包的主要功能,如核心接口、AspectJ集成、注解支持、自动代理等。此外,还提及了Spring AOP的可扩展性和适配器机制,以及AOP在Spring IoC容器中的应用。通过本文,读者能够理解Spring AOP的组织结构和关键组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring源码系列-AOP的项目结构解析

上一篇播客已经阐述了AOP的同用的接口方法定义。但是真正的aop实现方法 远远不止这个。这篇文章就专门介绍整个框架aop的代码结构。



前言

我们看代码更多是学习spring的代码思想,设计方式(设计模式) 同时当你知道了整个代码结构。就知道哪一块是干啥的。以后遇到问题,也可以很快定位。

aop包

包含的内容:

核心 Spring AOP 接口,建立在 AOP 联盟 AOP通用接口之上。

任何 AOP 联盟
MethodInterceptor 都可以在 Spring 中使用。
Spring AOP 还提供:

    • Introduction support
    • 一个切入点抽象,支持“静态”切入点(基于类和方法)和“动态”切入点(也考虑方法参数)。当前没有用于切入点的 AOP 联盟接口。
    • 全方位的通知类型,包括around、before、afterreturns和throws通知。
    • 可扩展性允许在不修改核心框架的情况下插入任意自定义建议类型。
      • Spring AOP 可以以编程方式使用或(最好)与 Spring IoC 容器集成。

    aop.aspectj包

    AspectJ 集成包。包括 AspectJ 5 注释样式方法的 Spring AOP 建议实现,以及
    AspectJExpressionPointcut:一个 Spring AOP 切入点实现,它允许将 AspectJ 切入点表达式语言与
    Spring AOP 运行时框架一起使用。

    请注意,使用此包不需要需要使用 {@code ajc} 编译器或
    AspectJ 加载时编织器。它旨在通过基于代理的 Spring AOP 框架,使用具有一致语义的 AspectJ 功能的重要子集。

    aop.aspectj.annotation包

    使 AspectJ 5 @Annotated 类能够在 Spring AOP 中使用的类。

    通常通过 AspectJAutoProxyCreator 而不是直接使用。

    aop.aspectj.autoproxy包

    基于 AspectJ 启用自动代理的基类。
    对 AspectJ 注释方面的支持驻留在“aspectj.annotation”包中。

    aop.config包

    声明式 AOP 配置的支持包,XML 模式是主要的配置格式。

    因为spring的配置基本都是xml配置的

    aop.framework包

    包含 Spring 基本 AOP 基础结构的包,符合 AOP Alliance 接口。

    Spring AOP 支持代理接口或类、介绍,并提供静态和动态切入点。

    任何 Spring AOP 代理都可以投到这个包中的 ProxyConfig AOP 配置接口来添加或删除拦截器。

    ProxyFactoryBean 是一种在 BeanFactory 或 ApplicationContext 中创建 AOP 代理的便捷方式。但是,可以使用 ProxyFactory 类以编程方式创建代理。

    aop.framework.adapter包

    允许 Spring AOP 框架处理任意通知类型的 SPI 包。

    只想使用 Spring AOP 框架而不是扩展其功能的用户不需要关心这个包。

    您可能希望使用这些适配器在 MethodInterceptor 中包装 Spring 特定的建议,例如 MethodBeforeAdvice,以允许它们在支持 AOP 联盟接口的另一个 AOP 框架中使用。

    这些适配器不依赖于任何其他 Spring 框架类来允许此类使用。

    这里插一句:SPI 是一种服务发现机制。这里不展开。

    aop.framework.autoproxy包

    在 ApplicationContexts 中使用的 Bean 后处理器通过自动创建 AOP 代理来简化 AOP 的使用,而无需使用 ProxyFactoryBean。

    此包中的各种后处理器只需添加到 ApplicationContext(通常在 XML bean 定义文档中)即可自动代理选定的 bean。

    NB:BeanFactory 实现不支持自动自动代理,因为后处理器 bean 仅在应用程序上下文中自动检测。可以在 ConfigurableBeanFactory 上显式注册后处理器。

    aop.interceptor包

    提供各种拦截器实现。更具体的拦截器可以在相应的功能包中找到,比如“transaction”和“orm”。

    aop.scope包

    支持基于 AOP 的目标对象范围,具有可配置的后端。

    aop.support包

    使用 Spring 的 AOP API 的便利类。

    aop.support.annotation包

    对 AOP 切入点的注释支持。

    总结

    通过这篇文章,我们能大致可以知道每个包下的存放的类的用途。
    接下来我们就来看一下具体的流程是怎么样的。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值