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对比

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

      相关文章
      |
      1月前
      |
      监控 Java 开发者
      Spring AOP动态代理
      Spring AOP动态代理
      40 1
      |
      1月前
      |
      Java Spring 容器
      Spring的AOP失效场景详解
      Spring的AOP失效场景详解
      88 0
      |
      23天前
      |
      设计模式 Java Maven
      Spring Aop 底层责任链思路实现-springaopdi-ceng-ze-ren-lian-si-lu-shi-xian
      Spring Aop 底层责任链思路实现-springaopdi-ceng-ze-ren-lian-si-lu-shi-xian
      31 1
      |
      1月前
      |
      XML Java 开发者
      深入解析 Spring 和 Spring Boot 的区别
      深入解析 Spring 和 Spring Boot 的区别
      |
      2月前
      |
      XML Java 数据格式
      5个点轻松搞定Spring AOP底层实现原理
      AOP 也是 Spring 中一个较为重要的内容,相对于传统的 OOP 模式,AOP 有很多让人难以理解的地方,本篇文章将向大家介绍 AOP 的实现方法及其底层实现,内容包括:
      44 1
      |
      3天前
      |
      XML Java C++
      【Spring系列】Sping VS Sping Boot区别与联系
      【4月更文挑战第2天】Spring系列第一课:Spring Boot 能力介绍及简单实践
      28 0
      【Spring系列】Sping VS Sping Boot区别与联系
      |
      16天前
      |
      XML Java Maven
      Spring之Aop的注解使用
      Spring之Aop的注解使用
      |
      22天前
      |
      Java Spring
      Spring 如何实现 AOP
      Spring 如何实现 AOP
      17 0
      |
      30天前
      |
      Java 编译器 程序员
      Spring AOP 和 AspectJ 的比较
      Spring AOP 和 AspectJ 的比较
      35 0
      |
      1月前
      |
      Java Spring
      【spring(三)】AOP总结
      【spring(三)】AOP总结