Spring AOP从0到1

Spring有两大核心:

1、IoC 控制反转

2、AOP 面向切面编程

AOP:切面就是指某⼀类特定问题, 所以AOP也可以理解为面向特定⽅法编程.

引入AOP依赖

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-aop</artifactId>

</dependency>

Spring AOP详解

1、分为5个核心

1.1、切点(Pointcut)

Pointcut 的作⽤就是提供⼀组规则 (使⽤ AspectJ pointcut expression language 来描述), 告诉程序对哪些⽅法来进⾏功能增强

上⾯的表达式execution(* com.example.aop.aspect.*.*(..))就是切点表达式.

1.2、连接点

满足切点表达式规则的⽅法, 就是连接点. 也就是可以被AOP控制的⽅法

所有com.example.aop.aspect路径下的方法都是连接点

1.3、通知

通知就是具体要做的⼯作, 指哪些重复的逻辑,也就是共性功能(最终体现为⼀个⽅法)

比如上述程序中记录业务⽅法的耗时时间, 就是通知

1.4、切面

切⾯(Aspect) = 切点(Pointcut) + 通知(Advice)

切⾯既包含了通知逻辑的定义, 也包括了连接点的定义.

2、通知类型

  1. @Around: 环绕通知, 此注解标注的通知⽅法在⽬标⽅法前, 后都被执⾏
  2. @Before: 前置通知, 此注解标注的通知⽅法在⽬标⽅法前被执⾏
  3. @After: 后置通知, 此注解标注的通知⽅法在⽬标⽅法后被执⾏, ⽆论是否有异常都会执⾏
  4. @AfterReturning: 返回后通知, 此注解标注的通知⽅法在⽬标⽅法后被执⾏, 有异常不会执⾏
  5. @AfterThrowing: 异常后通知, 此注解标注的通知⽅法发⽣异常后执⾏

3、@PointCut

上面的代码可以看到,路径是很多重复的切点,要是更改的话,会非常麻烦,Spring提供了 @PointCut 注解, 把公共的切点 表达式提取出来, 需要⽤到时引⽤该切⼊点表达式即可

结果如下:

3、切⾯优先级 @Order

当我们在⼀个项⽬中, 定义了多个切⾯类时, 并且这些切⾯类的多个切⼊点都匹配到了同⼀个⽬标⽅法. 当⽬标⽅法运⾏的时候, 这些切⾯类中的通知⽅法都会执⾏, 那么这⼏个通知⽅法的执⾏顺序是什么样的呢?

当我们创建3个切面类之后的打印如下:


存在多个切⾯类时, 默认按照切⾯类的类名字⺟排序:

  1. @Before 通知:字⺟排名靠前的先执⾏
  2. @After 通知:字⺟排名靠前的后执⾏

但这样的排序,在工作中是不方便的,所以我们要借助注解@Order

排序会根据注解@Order里面的数字进行排序,数字越大越靠后

AOP面向切面编程的⼀些优势:

  1. 代码⽆侵⼊: 不修改原始的业务⽅法, 就可以对原始的业务⽅法进⾏了功能的增强或者是功能的改
  2. 减少了重复代码
  3. 提⾼开发效率
  4. 维护⽅便
相关推荐
Q_970956394 分钟前
java+vue+SpringBoo校园失物招领网站(程序+数据库+报告+部署教程+答辩指导)
java·数据库·vue.js
仰望星空@脚踏实地8 分钟前
Spring Boot Web 服务单元测试设计指南
spring boot·后端·单元测试
Wyc7240912 分钟前
Maven
java·数据库·maven
程序猿小D15 分钟前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的电影小说网站管理系统,推荐!
java·数据库·mysql·spring·毕业设计·ssm框架·电影小说网站
羊小猪~~21 分钟前
数据库学习笔记(十七)--触发器的使用
数据库·人工智能·后端·sql·深度学习·mysql·考研
用户83249514173227 分钟前
JAVA 版本多版本切换 - 傻瓜式操作工具
后端
estarlee30 分钟前
随机昵称网名API接口教程:轻松获取百万创意昵称库
后端
明天好,会的34 分钟前
跨平台ZeroMQ:在Rust中使用zmq库的完整指南
开发语言·后端·rust
追逐时光者41 分钟前
C#/.NET/.NET Core优秀项目和框架2025年6月简报
后端·.net
CodeWithMe1 小时前
【Note】《深入理解Linux内核》 Chapter 15 :深入理解 Linux 页缓存
linux·spring·缓存