SpringAOP编程

什么是AOP

AOP(Aspect Oriented Programming 的缩写,翻译为面向方面或面向切面编程),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术

<1>AOP 是 OOP 的延续和有益补充,也是 Spring 框架中的一个重要内容,是函数式编程的一种衍生范型

<2>在 Spring 中提供了 AOP 的丰富支持,允许通过分离应用的业务逻辑与系统级服务和事务管理进行内聚性的开发

利用 AOP 编程可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的合度降低(低糖合),提高程序的可重用性,同时提高开发的效率

AOP 与 OOP 的区别

<1>AOP (面向切面编程) 和 OOP (面向对象编程) 在字面上虽然非常类似,但却是面向不同领域的两种编程思想,这两种编程思想在目标上有着本质的差异目录

<2>OOP(面向对象编程):针对业务处理过程的实体及其属性和行为进行抽象封装为对象,以对象作为最基本的逻辑处理单元,并关注对象与对象之间的关系

AOP (面向切面编程): 针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以切面作为最基本的逻辑处理单元,以获得逻辑过程中各部分之间低耦合性的隔离效果

AOP 绝对不会代替 OOP,而是与 OOP 整合起来,以此之长,补彼之短

横切关注点

在软件开发中,分布于应用中多处的功能被称为横切关注点

<1>通常,这些横切关注点从概念上是与应用的业务逻辑分离的(但往往直接嵌入到应用的业务逻辑之中),AOP的正是将这些横切关注点与业务逻辑分离开来

<2>DI(依赖注入)有助于应用对象之间的解耦,而AOP可以实现横切关注点与他们所影响的对象之间的解耦

AOP主要功能

日志记录

性能统计

安全控制

事务处理

异常处理

其他功能

AOP横向抽取机制

AOP通过横向抽取机制为这类无法通过纵向继承体系(OOP)进行抽象的重复性代码提供解决方案

 AOP术语

连接点:

程序执行的某个特定位置。

注意:SpringAOP仅支持方法的连接点,即仅能在方法调用前、方法调用后、方法抛出异常时以及方法调用前后这些程序执行点织入增强

切点:

每个类一般都有多个连接点(一般一个方法就是一个连接点)。AOP需要定位到特定特定的连接点,而定位连接点的方式称为切点。

增强:

增强是织入到目标类连接点上的一段程序代码。在Spring AOP 中,增强除用于描述一段程序代码外还拥有另一个和连接点相关的信息-执行点的方位。结合执行点的方位信息和切点信息,AOP就可以找到特定的连接点。
因为增强既包括了用于添加到目标连接点上的一段执行逻辑,由包含用于定位连接点的方位信息,所以Spring所提供的增强接口都带有方位名。

引介:

引介是一种特殊的增强,它为类添加一些属性和方法。即使一个业务类原本没有实现某个接口,也可以通过AOP引介功能,动态地位该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类

目标对象:

他是增强逻辑的织入目标类。通过AOP,业务逻辑类只需要实现非横切逻辑的代码,而性能监视,事务管理等横切逻辑则可使用AOP动态织入到特定的连接点上。

织入:

织入是将增强添加对目标类具体连接点上的过程

AOP有三种织入方式:

<1>编译器织入:要求使用特殊的编译器

<2>类装载期织入:要求使用特殊的类装载器

<3>动态代理织入:在运行期为目标类添加增强生成子类的方式

注意:Spring AOP采用动态代理织入方式

代理:

一个类被AOP织入增强后,就产出一个结果类,它是融合了原类和增强逻辑的代理类。根据不同的代理方式,代理类既可能是和原类具有相同接口的类,也可能就是原类的子类。所以,可以采用调用原类相同的方式调用代理类。

切面:

切面有切点和增强或引介组成。它既包括了横切逻辑的定义,也包括了连接点的定义。

切面=切点+增强(或引介)

增强:Spring AOP框架使用增强接口定义横切逻辑,同时由于Spring AOP只支持方法连接点,所以增强既包含横切逻辑,还包含部分连接点信息

 

posted @ 2023-10-06 23:08  荧惑守心~  阅读(6)  评论(0编辑  收藏  举报