百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

如何理解Spring框架的重要特性:AOP

ccwgpt 2025-03-24 14:23 20 浏览 0 评论

前文《如何理解Spring框架的核心设计思想IoC模式 》介绍了Spring框架最重要的的设计模式:控制反转(IoC)。除了IoC以外,Spring框架还有一个重要特性就是面向切面编程,英文缩写为AOP。

本文就来探讨一下Spring的AOP技术。AOP是面向对象编程(OOP)的延续,也是Spring框架中的一个重要内容。

什么是AOP

AOPAspect Oriented Programming的缩写,中文说法是:面向切面编程,这个概念比较令人难以理解。简单说,AOP是一种通过程序运行期动态代理或预编译等机制,为分散的对象实现公共功能的一种技术。

听起来还是有点抽象,那么我们就举一个例子说明。有这样一个系统,对外界提供各种不同的服务。现在我们希望记录下来每个用户使用服务的行为,以便将来为用户建立画像。

为了实现这个功能,我们在每个用户的请求到达某个服务的时候记录一下,比如将<用户ID、服务ID、时间戳>这样一条记录写到日志上。

每个服务处理函数中都会有一段相同的代码块,获取当前时间,并记录日志。那么我们可以把这部分共同的代码块单独提取出来,封装为一个公共方法,由每个服务处理函数在一开始就调用它。

现在看起来已经不错了,但是我们还不满足,希望把这个公共函数与每个服务处理函数的代码彻底解耦。那么就可以利用DI(依赖注入)把这个公共方法(对象)注入到需要调用它的地方。

这就是AOP模式,利用AOP可以把公共方法与具体业务逻辑进行解耦,提高代码的可重用性和开发的效率

AOP模式的基本概念

下面我们来说明AOP模式的一些基本概念。

在上面的图中,各个服务在入口处都调用了公共方法,仿佛有一把刀把各个服务的业务逻辑,在服务入口处切开,看到的都是同样的方法调用,切开的地方就是服务的切面(Aspect)。

公共方法就是切面(Aspect),服务A和服务B调用切面的地方就是连接点(Joint point),服务A和服务B是要把切面连接进来的目标(Target)。

将切面和目标连接起来的动作,有一个专门术语:织入(Weaving),将切面方法和目标对象连接起来,是不是很像织布呢?

有时候,不是每一个目标对象都要调用同一个公共方法,更多的情况是,一类对象要调用切面A,另外一类对象要调用切面B。这样每个切面需要有一个筛选条件,通过这个筛选条件将切面和对应的连接点关联起来,只有符合条件的连接点才可以调用切面。

用来匹配连接点的筛选条件就是切点(Pointcut),切点定义的程序具体要做的操作是增强(Advice),也就是对织入的目标对象的功能的增强。

总结一下上面提到的概念:

  • Aspect(切面): Aspect 中会包含着一些 Pointcut 以及相应的 Advice
  • Joint point(连接点):表示在程序中明确定义需要调用切面的地方,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等。
  • Pointcut(切点):表示一组连接点,或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
  • Advice(增强):Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作。业内也有人将Advice称作通知,意思是当连接点满足切点条件后,触发通知。
  • Target(目标对象):织入 Advice 的目标对象。
  • Weaving(织入):将 Aspect 和其他对象连接起来的过程。
  • Weaver(编织器):根据配置(有时是通过注解)完成织入过程的组件。

Joint point类型

AOP中的连接点可以有多种类型:比如构造方法调用,字段的设置和获取,方法的调用,方法的执行,异常的处理执行,类的初始化等。

在AOP的概念中,我们可以在上面这些连接点织入我们自定义的切面。但是Spring只支持方法执行类型的连接点。

Advice 的类型

根据Advice在连接点执行的时机,又分为很多不同类型,我们可以根据不同的需求,选择合适的Advice类型。目前Spring框架支持5种Advice:

    • 前置通知 Before adviceJoint point 前被执行,用@Before注解声明;
    • 后置通知 After adviceJoint point 退出后被执行,用@After注解声明;
    • 返回通知 After return adviceJoint point 正常返回后执行,用@AfterReturning注解声明;
    • 异常通知 After throwing advice:在Joint point 抛出异常后执行,用@AfterThrowing注解声明;
    • 环绕通知 Around advice:在 Joint point 前和退出后都执行,用@Around注解声明。

如果要在Java程序中应用AOP,则可以引入Aspectj库,Aspectj库就是AOP模式的一个Java实现。而Spring AOP是基于Aspectj实现的专门针对于Spring自身支持的AOP框架。

我会持续更新关于物联网、云原生以及数字科技方面的文章,用简单的语言描述复杂的技术,也会偶尔发表一下对IT产业的看法,请大家多多关注,欢迎留言和转发,希望与大家互动交流,谢谢。

相关推荐

css布局方案汇总(28个实例图文并茂)

简介布局在我们前端日常开发来说是非常重要的,一个好的布局能简化代码的同时还能提高网页的性能。常见的布局方法有浮动(float)布局、绝对定位(position)布局、表格布局(table)、弹性(fl...

十款免费的CSS框架加速Web开发

Pure这是Yahoo最新推出的一款CSS框架,它只有HTML和CSS,没有使用任何JavaScript语言。总大小只有4.4kb,但功能却非常丰富,支持响应式样式和各种导航、表格、表单、按钮、网格和...

Tailwind CSS 是不是目前世上最好的CSS框架?

转载说明:原创不易,未经授权,谢绝任何形式的转载今天看了一篇国外大佬对TailwindCSS的看法,在这里分享给大家,看看大家是否赞同,以下是其相关内容的整理,由于翻译水平有限,欢迎大家讨论和指...

下一代 CSS 框架:Mojo CSS,为何如此受欢迎?

TailwindCSS推出即受到广大开发者的欢迎,当前Githubstar数已达77.8k。它是一个功能类优先(utility-first)的CSS框架,它提供了一系列功能类,让开发者...

常见的几种摄影构图方式

摄影构图,是一种在摄影画面中表现结构美、形式美的方式。构图能让摄影主体更加突出,画面更加有序。所以说,构图在摄影中是非常重要的一个环节。无论是前期构图还是后期构图,摄影者都要对构图有一个比较深的了解。...

风光摄影10大构图技巧,会用构图,照片更容易好看

风光摄影10大构图技巧,会用构图,照片更容易好看先解释一下,为什么会使用构图之后,照片更容易好看?因为,构图是根据很多好看的照片,总结出来的技巧,使用这些构图技巧,就相当于站在了巨人的肩膀上,也就是用...

掌握框式构图的摄影技巧,会让摄影爱好者的作品更有魅力!

很多摄影爱好者都知道摄影构图中有个框式构图,但大多数人对框式构图的摄影技巧,却一知半解。所以摄影爱好者们有必要更全面、深入的了解,并掌握框式构图,会对你摄影水平的提高更有帮助。【欢迎点击上方关注:金立...

这个构图很简洁,但为什么不耐看?

摄影爱好者最常犯的错就是过于复杂、主体不明确,但当遇到简单的场景往往又会出现单调、不耐看的状况。为什么会这样?说白了还是观察力不够。下面是本周的摄影入围习作,我们一起来看看这些照片中主体、陪体以及背景...

初学者需要记牢的八种常用构图法

作者:冯海军摄影中,构图很关键,决定照片是否成功,所以在构图上要加以重视和推敲,虽然说构图无定法,但是也有很多的规律可循,以下列举几种常用构图,会对初学者有很大的帮助。多彩刘卫洲摄苏州姑苏俱乐部(...

构图这件事不难!掌握14种构图模式就稳了

如果说视觉元素是视觉信息的载体,那么构图就是视觉元素的载体。没有适当形式的构图对视觉元素有机、有序地承载,平面设计将无法传达预定的设计意图和视觉信息。因此,对于平面设计而言,构图是平面设计不可或缺的重...

框架构图如何使用?

1分钟教你用手机拍大片。今天我们利用框架构图,在不同的运镜方法下拍摄。·首先将手机贴近地面,拍摄人物走过的画面。·然后利用3D效果的背景衬托,将手机贴近地面,以低角度仰拍人物。·最后我们用高清画质来呈...

面构图的5种超实用的构图形式 前景构图,框架构图,填充构图

面构图的5种超实用的构图形式。为什么有的人拍摄的照片好看又舒适?仔细观察会发现他们善用构图。大家好,今天带大家了解摄影中5种超实用的面构图形式。·一、前景构图。前景是构图中的神奇要素,可以提升照片的表...

一看就懂!跟着马格南的大师学构图

马格南图片社是迄今为止全球最重要的摄影图片社,其网站包涵了太多经典的名字和照片。细细品味这些经典图片,能够学到很多有用的构图手法。跟着大师走,总不会错吧?前后景的运用这似乎是非常常见的一种手法,仔细看...

这才是框架构图,有想法!能给你启发么?

框架构图大家并不陌生,但并不是有一个框就行了。框架构图用得不好,就很死板生硬,给人感觉很假。如果你理解透了,拍出的作品不会单调。今天就给大家分享一下框架构图,你看看有哪些妙用?1.广角与长焦的应用长焦...

7B小模型写好学术论文,新框架告别AI引用幻觉

ScholarCopilot团队投稿量子位|公众号QbitAI学术写作通常需要花费大量精力查询文献引用,而以ChatGPT、GPT-4等为代表的通用大语言模型(LLM)虽然能够生成流畅文本,但...

取消回复欢迎 发表评论: