SpringAOP和AspectJ有什么关系 ?

2024-04-01 21:04
文章标签 关系 aspectj springaop

本文主要是介绍SpringAOP和AspectJ有什么关系 ?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏:每天一个知识点
✨特色专栏: MySQL学习
🥭本文内容:SpringAOP和AspectJ有什么关系 ?
📚个人知识库: Leo知识库,欢迎大家访问

我们知道现在开发都是Spring,讲的最多的也是SpringAOP,在说springAOP前,先了解下AOP是什么?
AOP是通过 “预编译方式” 和 “运行期间动态代理” 实现程序功能的统一维护的一种技术。AOP是一个概念,其实现技术有AspectJ和springAOP,现在对AOP有个清楚的了解了,再来看下AOP中的一些概念。

  1. 切面(aspect),业务层面是程序中的标准代码/功能,不同于实际的业务逻辑,比如日志功能、事务等。代码层面切点+通知构成了一个切面。
  2. 连接点(joinPoint),程序运行过程中的某个特定点,比如方法执行、字段赋值、方法调用等。
  3. 切点/切入点(pointCut),一个匹配连接点的正则表达式。 每当任何连接点匹配一个切入点时,就执行与该切入点相关联的通知。可以把切入点看作是符合条件的连接点。
  4. 通知(advice),在一个连接点中,切面采取的行动,简单点说是对切点做什么事,主要有before、afterReturning、round等通知。
  5. 织入(weaving),连接切面和目标对象来创建一个通知对象的过程,简单点说是把通知应用到连接点的过程。

基本概念

  • Spring AOP:Spring AOP是Spring框架的一个模块,提供了面向切面编程的实现。它允许开发者定义横切关注点(cross-cutting concerns),比如日志、事务管理等,而不需要修改主业务逻辑代码。Spring AOP是通过代理方式实现的,它在运行时通过JDK动态代理或CGLIB代理为目标对象创建一个代理对象来实现横切逻辑的织入。
  • AspectJ:AspectJ是一个成熟的、功能完备的面向切面编程(AOP)框架,它不仅可以与Spring集成,还可以独立使用。AspectJ提供了比Spring AOP更为强大的切面功能,包括编译时织入、加载时织入等,允许在不同的编程生命周期阶段应用切面逻辑。

他们之间的关系

  • 互补性:Spring AOP和AspectJ在AOP领域是互补的。Spring AOP主要解决了企业应用中的常见问题,比如声明式事务和安全性,而AspectJ则提供了更为全面的AOP支持,包括那些Spring AOP无法处理的场景。
  • 集成性:Spring AOP在内部可以集成AspectJ的某些功能。例如,Spring可以使用AspectJ的注解(比如@Aspect),并且Spring也支持AspectJ的编织方式(尽管默认情况下使用的是Spring AOP的代理方式)。这意味着我们程序员可以在Spring框架中使用AspectJ的强大功能,而不必完全依赖AspectJ。

使用场景

  • Spring AOP:适用于简单的AOP需求,如声明式事务管理、日志记录等。当AOP需求不是特别复杂,或者希望完全融入Spring生态系统时,Spring AOP是一个很好的选择。
  • AspectJ:适用于需要复杂AOP处理的场景,如需要在编译时就织入切面的场合。如果需要全面的AOP支持,或者要处理Spring AOP无法处理的切面织入,AspectJ是更合适的选择。

实现方式不同

  • Spring AOP 使用代理的方式实现 AOP。Spring 利用 JDK 动态代理 或 CGLIB 代理创建代理对象,代理对象包装目标对象并拦截指定的切点方法,以执行通知。
  • AspectJ 支持两种方式实现 AOP。第一种方式是编译时织入,即在编译时将切面代码织入到目标类中。第二种方式是运行时织入,即在目标类加载时通过修改字节码方式织入切面代码。
    性能和能力
  • 性能:由于AspectJ可以在编译时织入切面,因此它通常在运行时性能上优于Spring AOP。Spring AOP在运行时创建代理对象,这可能会引入一些性能开销。
  • 能力:AspectJ提供了比Spring AOP更丰富的切面指令和织入选项,例如pointcut的表达能力更强,支持after、before、around等不同类型的通知,以及更精细的控制如within、call、execution等。

这篇关于SpringAOP和AspectJ有什么关系 ?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/868134

相关文章

在 Java 中,JDK、JRE、JVM 分别代表什么,有何关系和区别?

在Java开发的世界中,我们会经常听到JDK、JRE和JVM这三个词。它们都与Java的运行环境以及Java程序的编译和运行有关,它们之间也存在一些关联性和区别。 什么是JDK、JRE和JVM 我们来看它们分别是什么。 JDK,全称Java Development Kit,即Java开发工具包。顾名思义,JDK是用于Java开发的一套工具包,里面包含了Java的编译器javac、

1_CString char* string之间的关系

CString转char*,string string转char*,CString char* 转CString,string 一、CString转char*,string //字串转换测试 CString CString1; std::string string1; CHAR* char1=NULL; //1string1=CString1.GetBuffer();CStri

Mysql数据库约束的概述 , 逐渐约束 , 主键自增 , 表关系的概念和外键 ,多表关系约束介绍和使用

约束和表设计 1、DQL查询语句-limit语句(掌握) 目标 能够掌握limit语句的使用 讲解 作用: LIMIT是限制的意思,所以LIMIT`的作用就是限制查询记录的条数。 LIMIT语句格式: select * from 表名 limit offset, row_count;mysql中limit的用法:返回前几条或者中间某几行数据-- 1 表示分页查询的索引,对应数

抽象类和接口之间的关系

1。类可以实现多个接口而只能继承一个超类。 2。抽象类可以有非抽象方法而接口的方法只能都是抽象的。 3。抽象类可以定义和使用变量而接口则不可以。 4。抽象类中的方法可以有各种不同的修饰符,而接口中的方法默认都是public,不允许字面定修饰符。 一个接口中的成员函数可以在不同的类中安装,而它的成员函数可以有很多种的实现方法,但是抽象类却不能象这样,它必须是由子类来继承,然后由子类来实现它的

材质、纹理、贴图的关系

材质、纹理、贴图的关系 材质 (Material)包含贴图 (Map),贴图包含纹理 (Texture)。 纹理(Texture)是最基本的数据输入单位。

机器学习基础:与Python关系和未来发展

目录 初识Python Python的由来 自由软件运动 编译方式的演进 Python语言的特点 语法简单,易于理解 语法结构清晰,快速上手 丰富的第三方库 机器学习 监督学习 无监督学习 半监督学习         欢迎回到我们的神经网络与深度学习Tensorflow实战学习,本篇为人工智能学习第三篇文章。前面的文章中我们学习安装了Tensorflow-GPU,在本

Maven和JAVA_HOME的关系

在Java开发中,Maven和JAVA_HOME是两个关键的概念,它们在构建和运行Java应用程序时具有不同的角色,但却相互关联。以下是它们的关系和各自的作用: JAVA_HOME 定义和作用: JAVA_HOME是一个环境变量,它指向JDK(Java Development Kit)的安装目录。系统通过JAVA_HOME知道在哪里找到Java编译器(javac)、Java虚拟机(java)

什么是深度神经网络?与深度学习、机器学习、人工智能的关系是什么?

什么是深度神经网络?与深度学习、机器学习、人工智能的关系是什么? 🤖什么是深度神经网络?与深度学习、机器学习、人工智能的关系是什么?摘要引言正文内容1. 什么是深度神经网络?🧠1.1 深度神经网络的结构1.2 深度神经网络的工作原理 2. 深度学习与深度神经网络的关系🤔3. 机器学习与深度学习的区别🧠3.1 机器学习的类型3.2 深度学习在机器学习中的地位 4. 人工智能、机器学习与

java字符串在内存和文件中编码的不同——如何理解进制(二进制)与编码(UTF-8)的关系

不管是在内存中,还是文件中,还是网络传输中,计算机运算和存储的都只能是二进制。 内码是程序内部使用的字符编码,特别是某种语言实现其char或String类型在内存里用的内部编码;外码是程序与外部交互时外部使用的字符编码。 “外部”相对“内部”而言;不是char或String在内存里用的内部编码的地方都可以认为是“外部”。例如,外部可以是序列化之后的char或String,或者外部的文件、命令

电路和编程关系

1、电路编程(设计)与软件编程的区别表面上看只是一个图形形式,一个是文字形式;但实质上有很大的不同。2、计算机编程实际上是“按步骤解决问题”:把解决问题的方法分成若干的大步骤,每个大步骤又分为若干个小步骤,一直分下去,直到分不可分;然后计算机就按照步骤来一丝不苟的执行。这种“按步骤解决问题”的思路很利于执行。3、与计算机编程不同,电路是连续工作的,没有“步骤”一说。数据(电流或电压)持续的流入