什么是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. 自然语言处理 Paddle NLP - 预训练语言模型及应用

    什么是语言理解? 关于疫情的一段对话: 中国:我们这边快完了 欧洲:我们这边快完了 中国:我们好多了 欧洲:我们好多了 挑战: 语言的复杂性和多样性 多义/同义/歧义现象 灵活多变的表达形式 语言背后 ...

  2. Winform或WebForm使用ReportViewer报表设计,工具栏按钮英文显示的解决办法

    在项目开发中,我们总是会用到rdlc报表设计器,大多数情况下在本地开发环境中工具栏按钮显示的是中文,但是部署到客户环境后发现显示的是英文. 解决这个问题也是走了很多弯路,给大家简单说一下: 1.最初以 ...

  3. C++面试八股文:std::array如何实现编译器排序?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第25面: 面试官:array熟悉吗? 二师兄:你说的是原生数组还是std::array? 面试官:你觉得两者有什么区别? 二师兄:区别不是很大,原生 ...

  4. React组件三大属性state,props,refs

    1. React组件定义 1.1 函数组件(Function Components) 函数组件是一种简单的定义组件的方式,通过一个JavaScript函数来定义组件.函数接收一个props对象作为参数 ...

  5. GGTalk 开源即时通讯系统源码剖析之:数据库设计

    自从<开源即时通讯GGTalk 8.0发布,增加Linux客户端,支持在统信UOS.银河麒麟上运行!>一文在博客园发布后,有园友联系我QQ,说能不能整理个更系统更详细地介绍GGTalk源码 ...

  6. 即构发布 LCEP 低代码互动平台产品 RoomKit,实现互动房间0代码搭建

    2月5日,全球云通讯服务商ZEGO即构科技发布低代码互动平台 LCEP(Low-code Engagement Platform)产品 RoomKit,支持1V1在线课堂.小班课.大班课.视频会议.视 ...

  7. 即构自研海量有序数据网络MSDN,构建全球可靠的多云通讯链路

    2020是实时音视频技术应用大爆发的一年,电商直播.视频会议.在线课堂等多个场景获得了广泛关注.即构科技作为全球领先的云通讯商,截止目前已服务超过4000家企业客户,每日音视频通话时长超过20亿分钟, ...

  8. 如何将Maven项目快速改造成一个java web项目(方式一)

    因为实际需要,需要将一个maven项目改造成原生的java-web项目,写这边博客 来记录整个改造的过程.原始的maven项目,使用IDEA打开后,目录结构如下所示 直接通过文件夹查看项目结果如下 首 ...

  9. ARM Trusted Firmware——编译选项(二)

    @ 目录 1. 常用部分 2. 安全相关 2.1 签名 2.2 加密 2.3 哈希 2.4 中断 3.GICv3驱动程序选项 4. 调试选项 1. 常用部分 编译选项 解释 BL2 指定生成fip文件 ...

  10. Django创建数据库时设置字符集

    在控制台输入一下命令: create database 数据库名 charset=utf8;