news 2026/4/16 17:50:35

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/16 10:57:39

ResNet18数据增强:云端GPU加速预处理

ResNet18数据增强:云端GPU加速预处理 引言 作为一名Kaggle比赛选手,你是否遇到过这样的困扰:本地CPU进行数据增强需要耗费8小时,而比赛截止时间却在步步逼近?数据增强是提升模型泛化能力的关键步骤,但传统…

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

ResNet18迁移学习实战:预训练模型+云端GPU,省心又省钱

ResNet18迁移学习实战:预训练模型云端GPU,省心又省钱 1. 为什么创业公司需要迁移学习? 想象一下你要教一个大学生新知识。如果从教112开始,可能需要几年时间。但如果他已经有数学基础,你只需要教特定领域的新知识——…

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

ResNet18物体识别手把手:云端GPU免环境搭建,小白必看

ResNet18物体识别手把手:云端GPU免环境搭建,小白必看 引言:退休工程师也能轻松玩转AI 作为一名退休工程师,您可能对新技术充满好奇,但面对复杂的AI教程和没有独立显卡的电脑时,难免感到无从下手。别担心&…

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

电商自动化:Rembg批量抠图系统

电商自动化:Rembg批量抠图系统 1. 引言:智能万能抠图的时代来临 在电商、广告设计和内容创作领域,图像去背景是一项高频且关键的任务。传统手动抠图耗时耗力,而早期基于边缘检测或色度键控的自动方案又难以应对复杂场景。随着深…

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

ResNet18模型监控系统:性能衰减检测+云端自动化

ResNet18模型监控系统:性能衰减检测云端自动化 引言 在AI模型的实际生产环境中,模型性能会随着时间推移逐渐衰减。就像汽车需要定期保养一样,AI模型也需要持续监控和维护。本文将介绍如何用ResNet18搭建一个云端自动化监控系统,…

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

ResNet18论文复现:预配环境+云端GPU,专注研究不折腾

ResNet18论文复现:预配环境云端GPU,专注研究不折腾 引言:为什么复现论文这么难? 作为研究生,你可能经常遇到这样的困境:论文里的模型效果惊艳,但自己复现时却卡在环境配置阶段。特别是像ResNe…

作者头像 李华