news 2026/4/18 3:02:31

SpringAOP

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringAOP

AOP是啥?

AOP好IOC一样,都是一种思想,IOC是控制反转,AOP是面向切面编程

面向切面编程?

我们知道,JAVA是面向对象编程,意思是世间万物都可以作为一个对象,面向切面编程的意思就是把一类特定的问题做一个统一的处理,就比如登录的时候的拦截器,统一的登录,异常的统一处理,对某一类特定的问题进行处理,就可以叫做AOP,AOP是一种思想,对一类问题进行处理,拦截器是对AOP思想的具体实现

AOP是一种思想,实现的方法有很多,AspectJ,CGLIB,Spring AOP

举例

现在我要对图书管理项目进行优化,我需要知道每个方法执行的时间,如果在每个方法中都写一份统计时间的代码,那么就会很麻烦,而且后续修改起来难度也大,有没有什么方法可以把它统一起来,让我不需要每个方法都写一遍统计时间的代码?

有的兄弟,有点兄弟,像这么强势的已经存在了-AOP

SpringAOP

  1. 导入依赖

在pom文件中,需要添加springAOP的依赖

  1. 编写AOP程序

首先需要加一个@Componet注解,把这个类交个Srping管理,然后需要加一个@Aspect注解,表示这个是一个切面

@Arround注解,环绕通知,在目标方法前后都会执行

Execution()表达式表示对哪些方法进行增强

ProceedingJoinPoint 是环绕通知@Arround的专属参数

通过上面的代码我们可以看到,当执行方法的时候,会自动调用recodeTime这个方法,但是在原本的代码中,我并没有进行任何的操作,只是加了一个切面类

  1. AOP的优势
  1. 代码无侵入性,不需要修改现有的代码
  2. 减少重复代码
  3. 方便维护,开发效率提高
  1. SpringAOP详解

概念

切点(pointcut)

切点,也叫做切入点,作用是提供一组规则,告诉程序对哪些方法的哪些功能进行增强

切点表达式

说人话就是按照这个进行筛选,然后筛选出来执行我写的环绕通知

连接点(Join Point)

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

在这个路径下的所有方法,都称之为连接点

切点VS连接点

切点:规则

连接点:具体的方法

通知(Advice)

AOP面向切面编程中,我们会把重复的代码抽出来,单独定义,这个就是通知的内容

具体要做的事情,如记录耗时的时间(一个方法)

切面(Aspect)

切面 = 切点 + 通知

切面类包括通知的内容,切点的规则

这一整个类,我们就叫做切面类(@Aspect)

通知的类型

具体实现

访问t1

访问结果

通过结果可以看到

程序正常运转的情况下@AfterThrowing不会执行

@Around包含两部分,一个是前置逻辑,一个是后置逻辑

@Before表示会在通知之后执行

@AfterReturning在执行完,没有任何异常

@After最终通知,什么都执行结束了,无论是否抛出异常都结束

@Arround后置通知结束

2.异常情况

当访问的t2的时候,报错

执行Arround,然后执行before然后执行doafterthrowing,再执行after,不执行arround后

为什么不执行around呢,是因为arround环绕通知需要调用proced来执行原方法,需要获取到返回值

@Pointcut

切点表达式:

由于这个切点表达式大量存在且重复,所有spring就提供了一个注解@Pointcut把公共的注解提取出来,需要的时候引入即可

加一个注解@pointcut,把重复的注解写进去,当需要的时候,引用即可

切面优先级@order

如果存在多个切面类的情况下,before字母排名越靠前就越先执行,after越靠后越先执行,为了让我们可以手动指定先后的执行顺序,就有了order注解

加上order注解之后,数字越小的before越先执行,数字越大的after越先执行

示例图

切面1,Before进入前,然后到切面2的before,然后到目标方法,然后到切面2的after,然后才到切面1的after

Execution表达式

对应

访问修饰符合异常可以省略

常见的表达式

@annotation

当存在多个无规则的方法的时候,就需要使用这个注解,execution更时候的是有规则的方法

  1. 编写自定义注解
  2. 使用@annotation表达式来描述切点
  3. 在连接点的方法加上自定义的注解
  1. 自定义注解

新建一个Annotation类

Target表示这个类所修饰的对象范围,就是这个注解对什么生效

Retention表示的是这个类存活的时间长短,生命周期

使用

在需要执行的地方加上@annotation(地址)注解

在需要执行的方法中加上自定义注解

结果

总结

  1. AOP是一种思想,对某一类事情的集中处理,Spring框架实现了AOP就叫做SpringAOP,其他的实现就叫做对应的AOP
  2. SpringAOP的常见实现方式有两种

第一种是使用注解@Aspect来实现

第二种是使用自定义注解来实现

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 2:32:25

ResNet18跨域适应实战:风格迁移+云端一站式方案

ResNet18跨域适应实战:风格迁移云端一站式方案 引言 想象一下,你是一位数字艺术家,手上有100张梵高风格的画作,现在需要将它们全部转换成莫奈风格。手动重绘?那可能要花上几个月。这时候,AI风格迁移技术就…

作者头像 李华
网站建设 2026/4/10 6:38:58

ResNet18省钱攻略:云端GPU按需付费,比买显卡省90%

ResNet18省钱攻略:云端GPU按需付费,比买显卡省90% 1. 为什么创业团队需要云端GPU? 对于创业团队来说,开发AI产品原型时最头疼的问题就是硬件成本。传统方案通常有两种: 自购显卡:一块RTX 3090显卡市场价…

作者头像 李华
网站建设 2026/4/18 2:40:42

ResNet18-CIFAR10一键运行:云端镜像开箱即用

ResNet18-CIFAR10一键运行:云端镜像开箱即用 引言:为什么选择云端镜像? 作为编程培训班的学员,你可能正在为ResNet18的作业发愁——50%的同学都卡在了环境配置环节。传统的本地安装需要配置Python环境、安装PyTorch、下载数据集…

作者头像 李华
网站建设 2026/4/16 12:15:04

从零部署Qwen2.5-7B-Instruct大模型|vLLM加速,Chainlit前端交互

从零部署Qwen2.5-7B-Instruct大模型|vLLM加速,Chainlit前端交互 引言:为什么选择 Qwen2.5 vLLM Chainlit 架构? 在当前大模型快速迭代的背景下,如何高效、低成本地将先进语言模型部署为可交互服务,成为…

作者头像 李华
网站建设 2026/4/16 20:14:19

ResNet18物体识别部署捷径:预置镜像免调试,省心省力

ResNet18物体识别部署捷径:预置镜像免调试,省心省力 引言 作为一名程序员,周末想用ResNet18做个有趣的物体识别项目,但最头疼的往往不是写代码,而是配环境——CUDA版本冲突、PyTorch安装报错、依赖库缺失...这些琐碎…

作者头像 李华
网站建设 2026/4/16 18:44:03

9个AI论文撰写解决方案,实现LaTeX自动化与文本润色

工具对比排名 工具名称 核心优势 支持LaTeX 适用场景 aibiye AIGC率降个位数,兼容知网规则 是 AI痕迹强处理 aicheck 学术改写优化,语义保留佳 是 格式统一化 askpaper 降重降AI一体,20分钟快速响应 是 初稿优化 秒篇 人类特…

作者头像 李华