什么是AOP

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

AOP的作用

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

AOP的功能

  • 日志记录
  • 性能统计
  • 安全控制
  • 事务处理
  • 异常处理
  • 其他功能

AOP专业术语

  • 横切关注点:在软件开发中,分布于应用中多处的功能被称为横切关注点。通常,这些横切关注点从概念上是与应用的业务逻辑分离的(但往往直接嵌入到应用的业务逻辑之中),AOP的目标正是将这些横切关注点与业务逻辑隔离开来。
  • 连接点(Joinpoint):程序执行的某个特定位置〈如类开始初始化前、类初始化后。类某个方法调用前、调用后、方法跑吹异常后)。一个类或一段程序代码拥有一些具有边界性质的特定点,这些代码中的特定点就称为连接点(即插入代码的位置)。

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

  • 切点(Pointcut):每个类一般都拥有多个连接点(一般一个方法就是一个连接点)。AOP需要定位到特定的连接点,而定位连接点的方式称为切点。连接点相当于数据库中的记录,而切点相当于查询条件,一个切点可以匹配多个连接点。(即插入代码位置的查询条件)。

注意:Spring AOP中切点通过Pointcut接口定义,它使用类和方法作为连接点的查询条件。SpringAOP的规则解析引擎负责解析切点所设定的查询条件,找到对应的连接点。

  • 增强(Advice):增强是织入到目标类连接点上的一段程序代码。在Spring AOP中,增强除用于描述一段程序代码外还拥有另一个和连接点相关的信息-执行点的方位。结合执行点的方位信息和切点信息,AOP就可以找到特定的连接点。因为增强既包括了用于添加到目标连接点上的一段执行逻辑,由包含用于定位连接点的方位信息,所以Spring所提供的增强接口都带有方位名(即插入的代码块)。
  • 引介(lntroduction):引介是一种特殊的增强,它为类添加一些属性和方法。即使一个业务类原本没有实现某个接口,也可以通过AOP引介功能,动态地位该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。
  • 目标对象(Target):它是增强逻辑的织入目标类。通过AOP,业务逻辑类只需要实现非横切逻辑的代码,而性能监视、事务管理等横切逻辑则可以使用AOP动态织入到特定的连接点上。
  • 织入(Weaving):织入是将增强添加对目标类具体连接点上的过程。
  • 切面(Aspect):切面由切点和增强或引介组成。它既包括了横切逻辑的定义,也包括了连接点的定义。
  • 切面=切点+增强((或引介)

注意:Spring AOP负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点中。

AOP织入的的三种方式

  • 编译器织入:要求使用特殊的编译器;
  • 类装载器织入:要求使用特殊的类装载器;
  • 动态代理织入:在运行期为目标类添加增强生成子类的方式。

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

AOP的优点

  • AOP将横切关注点从主业务逻辑中分离出来,使得代码更加模块化和可维护。通过将横切关注点封装为独立的切面,可以将其在不同的应用程序模块中进行重复使用,避免了代码的重复编写。

  • AOP提供了一种机制,使得横切关注点可以在应用程序的不同部分中进行重用。这样可以减少代码的冗余,提高代码的可重用性,并且在需要修改横切关注点时,只需要修改切面,而无需修改主业务逻辑。

  • AOP通过将横切关注点分离出来,实现了主业务逻辑与横切关注点的解耦。主业务逻辑只需关注核心功能的实现,而不需要关注横切关注点的具体处理逻辑。这样可以提高代码的可维护性,并且方便对横切关注点进行修改和扩展。

  • AOP可以使代码更加简洁和清晰。通过将横切关注点从主业务逻辑中提取出来,主业务逻辑的代码变得更加简单明了,不再混杂着各种横切关注点的处理逻辑。

  • AOP将横切关注点封装为独立的切面,便于管理和维护。当需要修改或调整横切关注点时,只需修改切面的代码,而不需要修改主业务逻辑。这样可以减少错误发生的概率,并且方便对横切关注点进行跟踪和调试。

AOP(面向切面编程)的更多相关文章

  1. AOP 面向切面编程, Attribute在项目中的应用

    一.AOP(面向切面编程)简介 在我们平时的开发中,我们一般都是面对对象编程,面向对象的特点是继承.多态和封装,我们的业务逻辑代码主要是写在这一个个的类中,但我们在实现业务的同时,难免也到多个重复的操 ...

  2. AOP面向切面编程的四种实现

     一.AOP(面向切面编程)的四种实现分别为最原始的经典AOP.代理工厂bean(ProxyFacteryBean)和默认自动代理DefaultAdvisorAutoProxyCreator以及Bea ...

  3. Javascript aop(面向切面编程)之around(环绕)

    Aop又叫面向切面编程,其中“通知”是切面的具体实现,分为before(前置通知).after(后置通知).around(环绕通知),用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被 ...

  4. Method Swizzling和AOP(面向切面编程)实践

    Method Swizzling和AOP(面向切面编程)实践 参考: http://www.cocoachina.com/ios/20150120/10959.html 上一篇介绍了 Objectiv ...

  5. [转] AOP面向切面编程

    AOP面向切面编程 AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. ...

  6. C# AOP 面向切面编程之 调用拦截

    有时候我们需要在代码中对方法调用进行拦截,并修改参数和返回值,这种操作叫做AOP(面向切面编程) 不过需要注意的是,AOP的效率很慢,在需要高效率场合慎用. 以下是C#的AOP方法: 首先建立一个控制 ...

  7. 【原创】Android AOP面向切面编程AspectJ

    一.背景: 在项目开发中,对 App 客户端重构后,发现用于统计用户行为的友盟统计代码和用户行为日志记录代码分散在各业务模块中,比如在视频模块,要想实现对用户对监控点的实时预览和远程回放行为进行统计, ...

  8. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存

    代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...

  9. 论AOP面向切面编程思想

    原创: eleven 原文:https://mp.weixin.qq.com/s/8klfhCkagOxlF1R0qfZsgg [前言] AOP(Aspect-Oriented Programming ...

  10. 学习笔记: AOP面向切面编程和C#多种实现

    AOP:面向切面编程   编程思想 OOP:一切皆对象,对象交互组成功能,功能叠加组成模块,模块叠加组成系统      类--砖头     系统--房子      类--细胞     系统--人    ...

随机推荐

  1. 2023-06-19:讲一讲Redis分布式锁的实现?

    2023-06-19:讲一讲Redis分布式锁的实现? 答案2023-06-19: Redis分布式锁最简单的实现 要实现分布式锁,确实需要使用具备互斥性的Redis操作.其中一种常用的方式是使用SE ...

  2. AGC019F Yes or No

    题意 有 \(N+M\) 个问题,其中有 \(N\) 个问题的答案是 YES,\(M\) 个问题的答案是 NO.当你回答一个问题之后,会知道这个问题的答案,求最优策略下期望对多少.答案对 \(9982 ...

  3. Reactor 模式与Tomcat中的Reactor

    系列文章目录和关于我 参考:[nio.pdf (oswego.edu)](https://gee.cs.oswego.edu/dl/cpjslides/nio.pdf) 一丶什么是Reactor Th ...

  4. 【智能安防】基于AI的智能家居安全系统设计与实现

    目录 智能家居安全系统设计与实现:AI技术的应用 摘要 随着智能家居市场的快速发展,安全问题也日益突出.本文将介绍基于AI的智能家居安全系统设计与实现技术,重点阐述相关概念.实现步骤和优化改进.通过实 ...

  5. GPT3的内部结构:基于自回归、注意力机制等技术的语言处理框架

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 4. 应用示例与代码实现讲解 6. 结论与展望 7. 附录:常见问题与解答 GPT-3 是当前最为先进的自然语言处理框架之一,由 Open ...

  6. Bean生命周期的扩展点:Bean Post Processor

    摘要:在本篇文章中,我们将深入探讨Spring框架中的重要组件--BeanPostProcessor.首先,我们将了解其设计理念和目标,然后通过实际的例子学习如何基础使用它,如何通过BeanPostP ...

  7. 万字长文解析最常见的数据库恢复算法: ARIES

    万字长文解析最常见的数据库恢复算法: ARIES 首发地址: https://mp.weixin.qq.com/s/Kc13g8OHK1h_f7eMlnl4Aw Introduction 上图中为基于 ...

  8. GO web学习(三)

    跟着b站https://space.bilibili.com/361469957 杨旭老师学习做的笔记 路由 Controller / Router 角色 main():设置类工作 controlle ...

  9. CH32V003使用ADC八通道转换注意事项

    本文以CH32V003_F4P6(20Pin)为模板 1.PA1.PA2为外部晶振输入引脚,同时也是ADC的CH1与CH0,所以需要先在system_ch32v00x.c文件中更改为内部48M的宏即可 ...

  10. 【HTML】TinyMCE 编辑器

    HTML编辑器 一.页面效果 二.引入JS.CSS <!DOCTYPE html> <html lang="en"> <head> <me ...