【JavaEE27-后端部分】Spring AOP 核心概念详解——把抽象变具象,让理论不再“飘”

老铁们,上篇博客我们体验了 Spring AOP 的威力:轻轻松松就给所有 Controller 方法加上了耗时统计。但是,你是不是对 切点、连接点、通知、切面 这些概念还一头雾水?感觉它们像一堆飘在空中的术语,抓不住、摸不着?

别急,今天我们就把这些概念从天上拉到地上,用最生活的例子、最形象的画图,把它们掰开揉碎讲清楚。


一、Spring AOP的 概念

1. 四个概念

(1). 切点
(2). 切面
(3). 通知
(4). 连接点

咱们用下述的代码来举例子:



2. 举例说明概念

举个通俗的例子,比如一个老师要通知1班的学生在8:45上课,那假如我们有100个学生的话,那这个老师就得挨个挨个的发通知。这是比较麻烦的,于是呢,我们就建一个班级群,然后在班级里统一通知。

此时这里的连接点 就是:100个学生,比如张三、李四、王五,他们自己就是属于一个连接点。

我们的切点 就是这个1班的学生 (切点是一个表达式,所以我们叫1班的学生)。

我们的通知8:45上课

然后整个这件事情 我们就称之为切面


那如果你还对此概念有一些模糊,那么不用着急,我们再举一个例子,老铁们继续往下读。


二、举例说明四个概念

1. 先从一个故事开始:图书馆的"统一还书提醒"

1.1 没有 AOP 的日子

假设你经营着一家图书馆,里面有几千本图书。每天都有很多读者来借书、还书。你发现一个问题:很多读者总是忘记还书日期,导致逾期。你想在每个读者还书的时候,顺便提醒他"下次记得按时还书哦"

最简单的办法:在每一个还书的方法里,加上一句提醒。

java 复制代码
public void returnBook(Book book) {
    // 还书的核心逻辑
    updateBookStatus(book);
    // 提醒
    System.out.println("亲,记得按时还书哦");
}

但是,图书馆里有几十种还书方式:前台还书、自助机还书、APP还书......每个地方都要加。如果以后提醒文案改了,几十个地方都要改,累不累?

1.2 引入 AOP 后

AOP 的做法是:不修改任何还书代码,而是"在还书的时候自动附赠一句提醒"。就像你在超市买东西,收银员扫描商品后,小票上自动打印"谢谢惠顾"------收银员没有刻意去说,系统自动加的。

在 AOP 里:

  • 连接点:所有可以加提醒的地方(前台还书、自助机还书、APP还书)------也就是所有可能被增强的方法。
  • 切点:你只关心"还书"这个方法,不关心其他方法(比如借书、查书)。切点就是一条规则,告诉程序"只对还书方法进行增强"。
  • 通知:具体要做的提醒动作------"亲,记得按时还书哦"。
  • 切面 = 切点 + 通知 = "在还书时加上提醒"。

2. 核心概念逐一说(配图)

2.1 连接点(Join Point)------所有可能被切的地方

概念 :连接点是程序执行过程中的某个"点",比如方法调用、异常抛出、字段赋值等。在 Spring AOP 中,连接点通常指一个方法的执行

生活例子:一座大楼里有无数个房间(方法),每个房间的门(方法入口)都是一个"连接点"。理论上,你可以在任何一扇门上贴广告。

画图理解

一句话:连接点就是所有可以被 AOP 切入的地方。


2.2 切点(Pointcut)------我要切哪些地方

概念:切点是一组规则,用来筛选出你真正想增强的连接点。它就像一个"过滤器"。

生活例子 :你不想在每个房间门上贴广告,只想在"校长办公室"和"教导处"的门上贴。你定的规则就是"只贴这两扇门"。这个规则就是切点

画图理解

代码中 :切点表达式 execution(* com.zhongge.controller.*.*(..)) 就是规则。

一句话:切点就是"在众多连接点中,挑出我感兴趣的那些"。


2.3 通知(Advice)------我要做什么

概念:通知是具体的增强代码,也就是"你要做的事情"。它决定了在连接点的什么时机执行(前、后、环绕、异常等)。

生活例子 :你选定了"校长办公室"这扇门(切点),然后你决定在门上贴一张"欢迎光临"的贴纸(通知)。贴纸就是通知

通知的类型(时机)

  • 前置通知(@Before):进门之前贴。比如在方法执行前打印日志。
  • 后置通知(@After):出门之后贴。无论方法是否成功,都执行。
  • 返回后通知(@AfterReturning):正常出门后贴。只有方法正常返回才执行。
  • 异常后通知(@AfterThrowing):摔了一跤出门后贴。只有方法抛异常才执行。
  • 环绕通知(@Around):把整个门包起来,进门出门都能贴。最强大,可以控制方法是否执行。

画图理解

一句话:通知就是"你要做的事 + 做事的时机"。


2.4 切面(Aspect)------切点 + 通知

概念:切面 = 切点 + 通知。它把"在哪里做"和"做什么"绑定在一起。

生活例子 :你制定了一条规则:"在校长办公室的门上(切点),贴一张'欢迎光临'的贴纸(通知)"。这条完整的规则就是切面

画图理解

一句话:切面就是"在哪些方法上,做什么事"。


3. 把这些概念串起来:一个完整的例子

假设我们要统计 BookController 中所有方法的执行耗时。

  • 连接点addBook()queryBookById()updateBook()deleteBook()batchDelete() 等所有方法。
  • 切点execution(* com.zhongge.controller.BookController.*(..))------只选择 BookController 中的方法。
  • 通知:记录开始时间、结束时间,计算差值并打印。
  • 切面 :把切点和通知组合成一个 @Aspect 类。

画图表示


4. 一张图总结所有概念


老铁们,本期我们先简单对SpringAOP的概念进行具体化的理解~

后续内容干货满满,记得点赞👍+关注💖+收藏⭐,不迷路!

下一期,我们将对SpringAOP通知类型的详细用法多个切面的执行顺序,敬请期待~🚀

相关推荐
曹牧2 小时前
Java:上传文件到网页
java·开发语言
弹简特2 小时前
【JavaEE29-后端部分】Spring AOP 切点表达式详解——精准定位,想切哪里切哪里
java·spring·spring aop
gf13211112 小时前
【python_使用指定应用发送飞书卡片】
java·python·飞书
弹简特2 小时前
【JavaEE28-后端部分】Spring AOP 通知详解——五种“增强时机”,一网打尽
java·spring·spring aop
lulu12165440782 小时前
谷歌Gemma 4实战指南:Apache 2.0开源,移动端AI新时代来临
java·开发语言·人工智能·开源·apache·ai编程
程序员阿明2 小时前
spring boot在普通方法中获取HttpServletRequest及其使用的方式
java·spring boot·后端
花千树-0102 小时前
Spring Boot 启动慢排查与优化实战指南
java·spring boot·后端·spring
小江的记录本2 小时前
【Docker】《 Docker 高频常用命令速查表 》
java·前端·后端·http·docker·容器·eureka
kaixiang3002 小时前
若依RuoYi实战
java·服务器·前端