随笔 - 172  文章 - 52  评论 - 6  阅读 - 17万

[java-spring]-spring-AOP

文章目录

虽然 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 的库,以及它的核心是什么,它是如何使用的,向往能够对你有所帮助。请在评论中留下您的想法,不要忘记分享!

posted on   共感的艺术  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2020-03-09 人形词云,根据图片黑白形状绘制词云
2020-03-09 汉化的simple词云
2020-03-09 对于数据的平均值处理
2020-03-09 文字替换成函数返回数字进行排序
2020-03-09 校验
2020-03-09 Python:使用lambda对列表(list)和字典(dict)排序
2020-03-09 python中的数据排序
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示