Spring AOP 是什么?

3 篇文章 0 订阅
2 篇文章 0 订阅

声明:请勿直接抄袭,翻译不易,转载请注明 https://blog.csdn.net/Big_Rotor/article/details/88765984 ,谢谢。


虽然 AOP 不经常被讨论,但是它在 Spring 中有着广泛的应用。对你来说,也许是时候去熟悉 AOP 并让它为你所用了。

你了解 Spring AOP 吗?你有在你目前的 Spring Boot 项目中使用它吗?如果没有,这篇文章就是为你准备的!

最近,我看到很多项目都在使用 Spring Boot 和其他优秀框架开发的最新技术。一方面,这听起来是很棒的,但是另一方面,我经常看到很多开发人员并没有充分利用这些新技术的全部有点。

我认为主要是因为多数的书和文档都过于学术化并且晦涩难懂。所以这就是为什么我决定谈一谈我对面向切面编程(aspect-oriented programming)的一点理解。

什么是面向切面编程


面向切面编程是一种编程范式,试图解决`横切关注点(cross-cutting concerns)`的问题。面向切面编程(AOP)是对面向对象编程(OOP)的一种补充,它提供了一种不同的方式去思考程序的结构。

在 OOP 中最小的单元是类(class),而在 AOP 中最小的单元是切面(aspect)

更通俗地讲就是,AOP 有助于我们将不同但是有必要的重复性代码重构为不同的模块。这么做的好处是,我们可以将这些重复性代码集中管理起来复用,而不是每次都要重复写一遍。

这种方法的好处是,代码将会变得更易于维护,从而将业务逻辑从杂乱的代码中脱离出来,专注于业务逻辑代码的开发。我们将这些不同的功能划分到不同的切面中。

一个切面是对杂乱地散落在各个类中的横切关注点的模块化。比如,集中日志记录事务管理就是最好的例子。

使用 AOP 简化代码


让我们看看如下的示例代码。

图一
在这里,你会意识到有些代码是于业务逻辑无关的。所以,我们应该要将它们抽离出来,放到其他地方,将业务逻辑单独分出来处理。

在这里插入图片描述

AOP 如何大规模运作


如果你的系统中有些包和类中没有使用 AOP,例如跟踪,事务和异常处理,那么就必须在每个类和方法中去实现它们。

这么做的结果就是会导致如下两个问题:

  • 代码纠缠(Code tangling) 每个类和方法中都包含代码追踪(tracing),事务以及异常处理——甚至是业务逻辑。在一个这样的方法中,很难分清代码中实际做的是什么处理。
  • 代码交叉(Code scattering) 诸如事务之类的切面分散在代码各个角落中,而不是在系统中特定的地方实现。
    在这里插入图片描述

使用 AOP 能够帮助你解决这样的问题。所以,在这里 AOP 所做的就是将所有散落各处的事务代码集中到一个事务切面中。然后,将所有的追踪代码(tracing code)集中到一个切面中。最后,将异常处理集中到一个切面中。

至此,就可以是实现业务逻辑和其他切面之间的分离。
在这里插入图片描述

横切关注点


AOP 中一个最重要的概念是横`切关注点(cross-cutting concerns)`。在上面,我举了 AOP 的几个例子`追踪,异常处理和事务(tracing, exception handling, and transactions)`,这些全都是横切关注点。一些类和方法必须实现它们。

在经典的面向对象编程中,无法将它们集中到一个地方统一实现,因此无法避免代码纠缠和胡乱交叉。

而面向切面编程则允许你在一个集中的地方实现横切关注点。所以,如果使用 AOP,那么将会允许你先实现你的业务逻辑,然后再统一处理横切关注点的问题。

通过这种方式,你可以编写基础结构并决定是否要将事务或日志记录添加到代码中。因此,你可以创建自己的中间件。然后,使用 Spring AOP 将这些切面添加到程序中,以便程序处在在运行时状态的时候,实际地去执行这些切面和主要的业务逻辑。


什么是 Spring AOP?


如果你看过我的文章《What is Spring framework in java?》,那么你一定知道 Spring AOP 是 Spring 的核心模块之一。

Spring AOP 通过消除代码纠缠和交叉问题,在我们的项目中支持面向切面的模块化。将 Spring AOP 库添加到我们的项目中,你将会开始体验到使用它的一些组件所带来的好处。

这些组件如 注解(annotation)建言(advice)连接点(join points)、以及切点(point cuts)

通常,你会使用 AOP 来实现企业级的功能开发,从而使 Spring 框架更加实用。

AOP 允许你准确地将你所定义的切面集中到特定的地方。因此,你将获得可配置的中间件。如果你想要更加深入地了解 Spring AOP,请继续关注接下来要发表的文章或这个网站

总结


在这篇文章中,我尝试去说清楚面向切面编程的概念并介绍了它与 Spring 框架之间的关系。在我的下一篇文章中,我将深入探讨 Spring AOP 的库,以及它的核心是什么,它是如何使用的,向往能够对你有所帮助。请在评论中留下您的想法,不要忘记分享!

原文链接     What Is Spring AOP?

欢迎扫码关注我的公众号「蜗牛永动机」,回复 1024 免费获取 5G 编程学习资源~

在这里插入图片描述

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值