Spring AOP 是什么?

声明:请勿直接抄袭,翻译不易,转载请注明 http://www.javashuo.com/article/p-okwkfoys-mv.html ,谢谢。html


虽然 AOP 不常常被讨论,可是它在 Spring 中有着普遍的应用。对你来讲,也许是时候去熟悉 AOP 并让它为你所用了。

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

最近,我看到不少项目都在使用 Spring Boot 和其余优秀框架开发的最新技术。一方面,这听起来是很棒的,可是另外一方面,我常常看到不少开发人员并无充分利用这些新技术的所有有点。web

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

spring

什么是面向切面编程


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

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

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

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

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

模块化

使用 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 编程学习资源~

在这里插入图片描述