AOP与AspectJ的关系

  • AspectJ简介
    • 两者关系
    • 引用关系
    • 织入(Weaving)
    • 依赖
  • 代理模式
    • aspectj静态代理
    • jdk动态代理
    • cglib的动态代理

AspectJ简介

AspectJ是java编程语言的无缝的面向方面的扩展,一整套完整的切面增强解决方案,包含自己的语法,编译器,最终可以在java代码的字节码中植入切面代码。

AspectJ 是静态代理的增强,所谓的静态代理就是 AOP 框架会在编译阶段生成 AOP 代理类,因此也称为编译时增强。
AspectJ 是 Java 语言的一个 AOP 实现,其主要包括两个部分:

  • 第一个部分定义了如何表达、定义 AOP 编程中的语法规范,通过这套语言规范,我们可以方便地用 AOP 来解决 Java 语言中存在的交叉关注点问题
  • 另一个部分是工具部分,包括编译器、调试工具等。

AspectJ 是最早、功能比较强大的 AOP 实现之一,对整套 AOP 机制都有较好的实现,很多其他语言的 AOP 实现,也借鉴或采纳了 AspectJ 中很多设计。在 Java 领域,AspectJ 中的很多语法结构基本上已成为 AOP 领域的标准。

两者关系

AOP面向切面编程是一种编程思想,是对OOP面向对象编程的一种补充。对于AOP这种编程思想,很多框架都进行了实现。Spring就是其中之一,可以完成面向切面编程。而AspectJ也实现了AOP的功能,且其实现方式更为简捷,使用更为方便,而且还支持注解式开发。所以,Spring又将AspectJ对于AOP的实现也引入到了自己的框架中。

引用关系

我们可以看到Spring Aop中引入了aspectjweaver这个包,下面说明一下作用和原因。

织入(Weaving)

AspectJ 作为 AOP 编程的完全解决方案,提供了三种织入时机,分别为

  1. compile-time:编译期织入,在编译的时候一步到位,直接编译出包含织入代码的 .class 文件
  2. post-compile:编译后织入,增强已经编译出来的类,如我们要增强依赖的 jar 包中的某个类的某个方法
  3. load-time:在 JVM 进行类加载的时候进行织入

组装方面来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。

依赖

所以Spring AOP只需要依赖aspectjweaver包来负责织入就可以,不需要引入AspectJ的编译器。

<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.13</version>
</dependency>

代理模式

aspectj静态代理

原理:在编译期织入代码,编译成class文件

优点:可以增强任何类,任何方法,包括(final,static修饰)

缺点:需要使用aspecj提供的Ajc编译器来编译Aj文件。

jdk动态代理

使用jdk的动态代理来增强接口实现类

原理:使用Proxy类的newProxyInstance方法运行期通过反射动态的生成代理对象

优点:不需要修改具体的业务代码,动态的增强方法,降低耦合性。

缺点:代理的对象必须有接口实现。

cglib的动态代理

可以对jdk的动态代理作为补充

原理:以创建目标类的子类来生成动态代理对象。

优点:不需要修改具体的业务代码,动态的增强方法,降低耦合性。

缺点:不能对final修饰的类,final修饰的方法或static的方法进行代理

AOP与AspectJ的关系相关推荐

  1. 框架源码专题:Spring的Aop实现原理,Spring AOP 与 AspectJ 的关系

    文章目录 1. Spring AOP 与 AspectJ 的关系 2. JDK和Cglib动态代理的区别 3. Spring AOP应用案例 4. Spring AOP有几种配置方式? 5. Spri ...

  2. AOP各种表达式,aspectj的关系

    Aop是什么 与OOP对比,面向切面,传统的OOP开发中的代码逻辑是自上而下的,而这些过程会产生一些横切性问题,这些横切性的问题和我们的主业务逻辑关系不大,这些横切性问题不会影响到主逻辑实现的,但是会 ...

  3. SpringAop与AspectJ的联系与区别____比较分析 Spring AOP 和 AspectJ 之间的差别

    SpringAop与AspectJ的联系与区别 区别 AspectJ AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Ja ...

  4. AOP之@AspectJ技术原理详解

    一AOP 1 主要功能 2 主要目标 3 适用对象 4 AOP与OOP的关系 二Android中使用AspectJ 1 Gradle 配置示 2 基本概念 21 切面Aspect 22 连接点Join ...

  5. 比较Spring AOP与AspectJ

    本文翻译自博客Comparing Spring AOP and AspectJ 介绍 如今有多个可用的AOP库,这些组件需要回答一系列的问题: 是否与我现有的应用兼容? 我在哪实现AOP? 集成到我的 ...

  6. 比较分析 Spring AOP 和 AspectJ 之间的差别

    面向方面的编程(AOP) 是一种编程范式,旨在通过允许横切关注点的分离,提高模块化.AOP提供方面来将跨越对象关注点模块化.虽然现在可以获得许多AOP框架,但在这里我们要区分的只有两个流行的框架:Sp ...

  7. 在 Spring Boot 中使用 Spring AOP 和 AspectJ 来测量方法的执行时间

    原文链接:https://dzone.com/articles/logging-average-method-execution-times-via-aspectj 作者:Murat Derman 译 ...

  8. aopaspect区别_面试官:什么是AOP?Spring AOP和AspectJ的区别是什么?

    AOP(Aspect Orient Programming),它是面向对象编程的一种补充,主要应用于处理一些具有横切性质的系统级服务,如日志收集.事务管理.安全检查.缓存.对象池管理等. AOP实现的 ...

  9. 比较Spring AOP和AspectJ

    1. 介绍 当前有多个可用的AOP库,这些库必须能够回答许多问题: 它与我现有的或新的应用程序兼容吗? 在哪里可以实施AOP? 它与我的应用程序集成的速度有多快? 性能开销是多少? 在本文中,我们将着 ...

  10. AOP的XML架构、AOP的@AspectJ

    AOP的XML架构 aop的xml架构例子:https://www.w3cschool.cn/wkspring/omps1mm6.html aop的@AspectJ例子:https://www.w3c ...

最新文章

  1. leetcode002 add_two_numbers
  2. 读“基于深度学习的图像识别技术研究综述”有感
  3. java b kb mb gb 转换_java 上传文件大小转换为 GB/MB/KB/B
  4. 数据结构哪本书比较好_东莞工厂电动伸缩门固定在哪一边比较好?
  5. python分布式爬虫及数据存储_二十一 Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫数据保存...
  6. client mac addr不能开机进不去系统_用asp.net core结合fastdfs打造分布式文件存储系统
  7. ASP.Net/C# - PayPal接口文档
  8. 每日一题/005/矩阵/数学归纳法/设A的顺序主子式均不为0.则有下三角矩阵B,使得BA是上三角矩阵,
  9. 矢量数据空间索引之R树索引
  10. 【乐理入门】——音符与五线谱(1)
  11. 快上车!薅腾讯羊毛!
  12. linux 改成utc时间_linux – 如何将时区设置为UTC-8
  13. Android签名工具 AndroidMultitool使用方法
  14. matlab零阶保持器的作用,5.8 记忆模块、零阶保持器、一阶保持器
  15. Bootstrap 折叠(Collapse)插件
  16. 鸡小德手机小常识 如何鉴定手机是否为行货
  17. Elasticsearch设置账号密码
  18. python找不到指定模块之几种可能的解决办法:
  19. 来自原CSDN排名第一博主:成功的背后!(给所有IT人)
  20. Map阶段环形缓冲区详细分析

热门文章

  1. 关于三段式状态机第三段是组合逻辑还是时序逻辑的问题?
  2. URI和URL的区别比较与理解
  3. Matlab数组及多项式运算
  4. uniapp 小程序 H5 移动端 写 table 表格 组件
  5. pdf文件如何生成目录 wps_wps怎么制作pdf文档 wps快速制作pdf文档方法教程
  6. tomcat10.0安装及配置教程(win10)
  7. CSS 颜色代码大全 CSS颜色对照表
  8. 电子罗盘简单介绍和应用
  9. 2019最新楚琳web打印控件破解版|楚琳web打印控件下载
  10. Yeah,我的Pygame安装成功了!(Windows Pygame 安装教程)