Spring系列八:Spring AOP 和 AspectJ AOP 区别

简介: 该文章收录专栏:叶秋学长的Spring系列专栏博主传送门:叶秋学长Spring AOP 和 AspectJ AOP 区别?今天由叶秋学长带领大家学习Spring AOP和AspectJ AOP 的区别~~Spring AOPSpring AOP 属于运行时增强,主要具有如下特点: 1. 基于动态代理来实现,默认如果使用接口的,用 JDK 提供的动态代理实现,如果是方法则使用 CGLIB 实现 2. Spring AOP 需要依赖 IOC 容器来管理,并且只能作用于 Spring 容器,使用纯 Java 代码实现 3. 在性能上,由于 Spring AOP 是基于

该文章收录专栏:

叶秋学长的Spring系列专栏

博主传送门:

叶秋学长

Spring AOP 和 AspectJ AOP 区别?

今天由叶秋学长带领大家学习Spring AOP和AspectJ AOP 的区别~~

Spring AOP

Spring AOP 属于运行时增强,主要具有如下特点:

    1. 基于动态代理来实现,默认如果使用接口的,用 JDK 提供的动态代理实现,如果是方法则使用 CGLIB 实现
    2. Spring AOP 需要依赖 IOC 容器来管理,并且只能作用于 Spring 容器,使用纯 Java 代码实现
    3. 在性能上,由于 Spring AOP 是基于动态代理来实现的,在容器启动时需要生成代理实例,在方法调用上也会增加栈的深度,使得 Spring AOP 的性能不如 AspectJ 的那么好。
    4. Spring AOP 致力于解决企业级开发中最普遍的 AOP(方法织入)。

    AspectJ

    AspectJ 是一个易用的功能强大的 AOP 框架,属于编译时增强,  可以单独使用,也可以整合到其它框架中,是 AOP 编程的完全解决方案。AspectJ 需要用到单独的编译器 ajc。

    AspectJ 属于静态织入,通过修改代码来实现,在实际运行之前就完成了织入,所以说它生成的类是没有额外运行时开销的,一般有如下几个织入的时机:

      1. 编译期织入(Compile-time weaving):如类 A 使用 AspectJ 添加了一个属性,类 B 引用了它,这个场景就需要编译期的时候就进行织入,否则没法编译类 B。
      2. 编译后织入(Post-compile weaving):也就是已经生成了 .class 文件,或已经打成 jar 包了,这种情况我们需要增强处理的话,就要用到编译后织入。
      3. 类加载后织入(Load-time weaving):指的是在加载类的时候进行织入,要实现这个时期的织入,有几种常见的方法

      整体对比如下:

      image.gif编辑

      Spring AOP和AspectJ对比

      本期分享到此结束,关注博主不迷路,叶秋学长带你上高速~~

      相关文章
      |
      2月前
      |
      XML 安全 Java
      使用 Spring 的 @Aspect 和 @Pointcut 注解简化面向方面的编程 (AOP)
      面向方面编程(AOP)通过分离横切关注点,如日志、安全和事务,提升代码模块化与可维护性。Spring 提供了对 AOP 的强大支持,核心注解 `@Aspect` 和 `@Pointcut` 使得定义切面与切入点变得简洁直观。`@Aspect` 标记切面类,集中处理通用逻辑;`@Pointcut` 则通过表达式定义通知的应用位置,提高代码可读性与复用性。二者结合,使开发者能清晰划分业务逻辑与辅助功能,简化维护并提升系统灵活性。Spring AOP 借助代理机制实现运行时织入,与 Spring 容器无缝集成,支持依赖注入与声明式配置,是构建清晰、高内聚应用的理想选择。
      403 0
      |
      1月前
      |
      XML Java 数据格式
      《深入理解Spring》:AOP面向切面编程深度解析
      Spring AOP通过代理模式实现面向切面编程,将日志、事务等横切关注点与业务逻辑分离。支持注解、XML和编程式配置,提供五种通知类型及丰富切点表达式,助力构建高内聚、低耦合的可维护系统。
      |
      6月前
      |
      监控 安全 Java
      Spring AOP实现原理
      本内容主要介绍了Spring AOP的核心概念、实现机制及代理生成流程。涵盖切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)等关键概念,解析了JDK动态代理与CGLIB代理的原理及对比,并深入探讨了通知执行链路和责任链模式的应用。同时,详细分析了AspectJ注解驱动的AOP解析过程,包括切面识别、切点表达式匹配及通知适配为Advice的机制,帮助理解Spring AOP的工作原理与实现细节。
      1024 13
      |
      3月前
      |
      人工智能 监控 安全
      Spring AOP切面编程颠覆传统!3大核心注解+5种通知类型,让业务代码纯净如初
      本文介绍了AOP(面向切面编程)的基本概念、优势及其在Spring Boot中的使用。AOP作为OOP的补充,通过将横切关注点(如日志、安全、事务等)与业务逻辑分离,实现代码解耦,提升模块化程度、可维护性和灵活性。文章详细讲解了Spring AOP的核心概念,包括切面、切点、通知等,并提供了在Spring Boot中实现AOP的具体步骤和代码示例。此外,还列举了AOP在日志记录、性能监控、事务管理和安全控制等场景中的实际应用。通过本文,开发者可以快速掌握AOP编程思想及其实践技巧。
      |
      3月前
      |
      人工智能 监控 安全
      如何快速上手【Spring AOP】?核心应用实战(上篇)
      哈喽大家好吖~欢迎来到Spring AOP系列教程的上篇 - 应用篇。在本篇,我们将专注于Spring AOP的实际应用,通过具体的代码示例和场景分析,帮助大家掌握AOP的使用方法和技巧。而在后续的下篇中,我们将深入探讨Spring AOP的实现原理和底层机制。 AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的核心特性之一,它能够帮助我们解决横切关注点(如日志记录、性能统计、安全控制、事务管理等)的问题,提高代码的模块化程度和复用性。
      |
      3月前
      |
      设计模式 Java 开发者
      如何快速上手【Spring AOP】?从动态代理到源码剖析(下篇)
      Spring AOP的实现本质上依赖于代理模式这一经典设计模式。代理模式通过引入代理对象作为目标对象的中间层,实现了对目标对象访问的控制与增强,其核心价值在于解耦核心业务逻辑与横切关注点。在框架设计中,这种模式广泛用于实现功能扩展(如远程调用、延迟加载)、行为拦截(如权限校验、异常处理)等场景,为系统提供了更高的灵活性和可维护性。
      |
      8月前
      |
      负载均衡 Dubbo Java
      Spring Cloud Alibaba与Spring Cloud区别和联系?
      Spring Cloud Alibaba与Spring Cloud区别和联系?
      |
      9月前
      |
      XML Java 测试技术
      Spring AOP—通知类型 和 切入点表达式 万字详解(通俗易懂)
      Spring 第五节 AOP——切入点表达式 万字详解!
      633 25
      |
      9月前
      |
      XML 安全 Java
      Spring AOP—深入动态代理 万字详解(通俗易懂)
      Spring 第四节 AOP——动态代理 万字详解!
      428 24
      |
      8月前
      |
      Java API 微服务
      微服务——SpringBoot使用归纳——Spring Boot中的切面AOP处理——Spring Boot 中的 AOP 处理
      本文详细讲解了Spring Boot中的AOP(面向切面编程)处理方法。首先介绍如何引入AOP依赖,通过添加`spring-boot-starter-aop`实现。接着阐述了如何定义和实现AOP切面,包括常用注解如`@Aspect`、`@Pointcut`、`@Before`、`@After`、`@AfterReturning`和`@AfterThrowing`的使用场景与示例代码。通过这些注解,可以分别在方法执行前、后、返回时或抛出异常时插入自定义逻辑,从而实现功能增强或日志记录等操作。最后总结了AOP在实际项目中的重要作用,并提供了课程源码下载链接供进一步学习。
      981 0