【JavaEE进阶】 Spring AOP快速上手
文章目录
- 🍃什么是AOP
- 🌳什么是Spring AOP
- 🌴上手Spring AOP
- 🚩引入依赖
- 🚩编写AOP程序
- ⭕总结
🍃什么是AOP
AOP是Aspect Oriented Programming的简称(又称为面向切⾯编程)
什么是面向切面编程呢?
- 切面就是指某⼀类特定问题,所以AOP也可以理解为面向特定方法编程.
什么是面向特定方法编程呢?
-
比如博主在前面实现的的"登录校验",就是⼀类特定问题.登录校验拦截器,就是对"登录校验"这类问题的统⼀处理.所以,拦截器也是AOP的⼀种应用.
-
AOP是⼀种思想,拦截器是AOP思想的⼀种实现.Spring框架实现了这种思想,提供了拦截器技术的相关接⼝.
-
同样的,统⼀数据返回格式和统⼀异常处理,也是AOP思想的⼀种实现.
简单来说:AOP是⼀种思想,是对某⼀类事情的集中处理
🌳什么是Spring AOP
AOP是⼀种思想,它的实现⽅法有很多,有Spring AOP,也有AspectJ、CGLIB等.
Spring AOP是其中的⼀种实现⽅式.
在博主实现图书馆管理实现了统⼀功能,那么是不是就学会了Spring AOP呢?答案当然不是.
拦截器作用的维度是URL(⼀次请求和响应),@ControllerAdvice 应用场景主要是全局异常处理(配合自定义异常效果更佳),数据绑定,数据预处理.
AOP作用的维度更加细致(可以根据包、类、方法名、参数等进⾏拦截),能够实现更加复杂的业务逻辑.
举个例⼦:
我们现在有⼀个项⽬,项目中开发了很多的业务功能

现在有⼀些业务的执行效率⽐较低,耗时较⻓,我们需要对接⼝进⾏优化.
第⼀步就需要定位出执行耗时⽐较长的业务方法,再针对该业务方法来进⾏优化
如何定位呢?
- 我们就需要统计当前项⽬中每⼀个业务⽅法的执⾏耗时.
如何统计呢?
- 可以在业务⽅法运⾏前和运⾏后,记录下⽅法的开始时间和结束时间,两者之差就是这个⽅法的耗时.
就如下图所示:

这种⽅法是可以解决问题的,但⼀个项目中会包含很多业务模块,每个业务模块⼜有很多接⼝,⼀个接⼝⼜包含很多⽅法,如果我们要在每个业务⽅法中都记录⽅法的耗时,对于程序员而言,会增加很多的⼯作量.
AOP就可以做到在不改动这些原始⽅法的基础上,针对特定的方法进行功能的增强.
AOP的作用:在程序运⾏期间在不修改源代码的基础上对已有⽅法进⾏增强,达到⽆侵⼊性,实现解耦
我们先来看一下Spring AOP是如何实现的吧、
🌴上手Spring AOP
我们使用Spring AOP来实现一下统计时间
🚩引入依赖
在pom.xml⽂件中添加配置
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
🚩编写AOP程序
首先我们准备需要实现统计的程序如下

编写AOP相关程序如下:
@Slf4j
@Aspect
@Component
public class TimeAspect {/*** 记录⽅法耗时*/@Around("execution(* com.example.demo.controller.*.*(..))")public Object recordTime(ProceedingJoinPoint pjp) throws Throwable {//记录⽅法执⾏开始时间long begin = System.currentTimeMillis();//执⾏原始⽅法Object result = pjp.proceed();//记录⽅法执⾏结束时间long end = System.currentTimeMillis();//记录⽅法执⾏耗时log.info(pjp.getSignature() + "执⾏耗时: {}ms", end - begin);return result;}
}
由于这里只是简单上手AOP,所以这里不做过多讲解。只是进行简单解释
代码解释如下:
-
@Aspect:标识这是⼀个切⾯类
-
@Around:环绕通知,在⽬标⽅法的前后都会被执⾏.后⾯的表达式表⽰对哪些方法进行增强.
-
ProceedingJoinPoint.proceed()让原始方法执行,并返回一个值
-
该方法最后需要返回一个值,也就是执行原始方法所接受的值
整个代码划分为三部分

接下来我们运行程序来观察一下效果
运行程序,观察日志如下:

我们通过AOP⼊门程序完成了业务接执行耗时的统计.
通过上面的程序,我们也可以感受到AOP面向切⾯编程的⼀些优势:
-
代码⽆侵⼊:不修改原始的业务方法,就可以对原始的业务方法进行了功能的增强或者是功能的改变
-
减少了重复代码
-
提高开发效率
-
维护方便
⭕总结
关于《【JavaEE进阶】 Spring AOP快速上手》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!
相关文章:
【JavaEE进阶】 Spring AOP快速上手
文章目录 🍃什么是AOP🌳什么是Spring AOP🌴上手Spring AOP🚩引入依赖🚩编写AOP程序 ⭕总结 🍃什么是AOP AOP是Aspect Oriented Programming的简称(又称为面向切⾯编程) 什么是面向…...
android应用开发基础知识,安卓面试2020
第一章:设计思想与代码质量优化 1、设计思想六大原则 2、三大设计模式 3、数据结构 4、算法 第二章:程序性能优化 1、启动速度和执行效率优化 2、布局检测与优化 3、内存优化 4、耗电优化 5、网络传输与数据存储优化 6、APK大小优化 7、屏幕适配 8、…...
unity-unity2d基础操作笔记(一)0.5.0
unity2d基础操作笔记 一、如何查看当前系统的输入设置二、如何获取水平或者垂直的输入的代码三、如何获取当前人物的x和y的值三、如何简单写出控制人物水平移动的代码四、如何设定游戏的帧率五、如何控制渲染顺序六、如何调整摄像机摄像范围大小七、如何对Hierachy中的图进行分…...
东芝工控机维修东芝电脑PC机维修FA3100A
TOSHIBA东芝工控机维修电脑控制器PC机FA3100A MODEL8000 UF8A11M 日本东芝TOSHIBA IA controller维修SYU7209A 001 FXMC12/FXMC11;BV86R-T2GKR-DR7YF-8CPPY-4T3QD; CPU处理单元是可编程逻辑控制器的控制部分。它按照可编程逻辑控制器系统程序赋予的功能接收并存储从编程器键入…...
AI新秀Mistral:“Open AI“ 新时代
最近互联网出现不少类似“下一代openai”、“GPT-4最强竞品”、“法国AI独角兽”、“欧洲的OpenAI”、“微软新宠儿”.... 的文章,都会附带一张图片,就是下面这张: 那么到底发生了什么,出来个什么东西呢?就是本文的主…...
Dockerfile制作镜像
Dockerfile制作镜像 Dockerfile介绍 dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 dockerfile仅仅是用来制作镜像的源码文件,是构建容器过程中的指令,docker能够读取dockerfile的指定进行自动…...
如何在宝塔面板中设置FTP文件传输服务并实现远程文件管理
文章目录 1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 宝塔FTP是宝塔面板中的一项功能,用于设置和管理FTP服务。通过宝塔FTP,用户可以创建FTP账号,配置FTP用户权限…...
记录 | 设置容器内外时间一致
1.共享主机的localtime 创建容器的时候指定启动参数,挂载localtime文件到容器内,保证两者所采用的时区是一致的 docker run -ti -d --name my-nginx -v /etc/localtime:/etc/localtime:ro docker.io/nginx /bin/bash 2.复制主机的localtime docker …...
LeetCode 239 滑动窗口最大值
LeetCode 239 滑动窗口最大值 问题描述 给定一个整数数组 nums 和一个整数 k,定义一个大小为 k 的滑动窗口,该窗口从数组的最左侧移动到最右侧。你可以看到在滑动窗口内的 k 个数字,并返回滑动窗口中的最大值。 解题思路 我们可以利用一个…...
Vue单文件组件(SFC)规范
Vue 单文件组件 (SFC) 规范 文件地址:Vue单文件组件规范 简介 .vue 文件是一个自定义的文件类型,用类 HTML 语法描述一个 Vue 组件。每个 .vue 文件包含三种类型的顶级语言块 <template>、<script> 和 <style>,还允许添加…...
简单版 git快速上手使用 clone项目 新建/切换分支 提交修改
Git是一个广泛使用的版本控制系统,允许多个用户跟踪文件的更改,并协作开发项目。 首先确定自己电脑已经安装了git,具体安装步骤请查找教程,应该不难。 以windows电脑为例,安装完后在搜索栏搜索git会出现 先解释一下这…...
本届挑战赛季军方案:基于图网络及LLM AGENT的微服务系统异常检测和根因定位方法
aiboco团队荣获本届挑战赛季军。该团队来自亿阳信通。 方案介绍 本届挑战赛采用开放式赛题,基于建行云龙舟运维平台的稳定性工具和多维监控系统,模拟大型的生活服务APP的生产环境,提供端到端的全链路的日志、指标和调用链数据。参赛队伍在组…...
【MySQL】_内连接
本专栏关于联合查询已建好相应库与表,链接如下: 【MySQL】_联合查询基础表-CSDN博客 基于以上库与表,本篇介绍内连接; 内连接表示语法有两种: 第一种: select [列名],[列名]... form [表1],[表2] where…...
ElasticSearch之跨集群搜索cross cluster search
写在前面 本文看下跨集群搜索相关内容。 1:实战 1.1:创建集群 bin/elasticsearch -E node.namecluster0node -E cluster.namecluster0 -E path.datacluster0_data -E discovery.typesingle-node -E http.port9200 -E transport.port9300 bin/elastic…...
06|Mysql内部组件结构
1. 连接器 客户端要向mysql发起通信都必须先跟Server端建立通信连接,而建立连接的工作就是由连接器完成的 mysql -h host[数据库地址] -u root[用户] -p root[密码] -P 3306连接步骤: 1、如果用户名或密码不对,你就会收到一个"Access denied for us…...
文件的写出操作
1. 文件不存在,创建文件后写出方法: <1>打开文件:open()方法是文件不存在时创建文件 file open("D:/test.txt","w",encoding"UTF-8")<2>写出文件: file.write("please open your book") #内容写到内…...
使用gitlab搭建npm的依赖库,并在项目中使用
使用gitlab搭建npm的依赖库,并在项目中使用 背景 1, 在多个项目中都有个公共的库包,又不想发布到npm 2, 一些开源的库,修改了一些定制化的东西,又不想推送代码到开源仓库(不一定会合并你的代码…...
如何让电脑待机而wifi不关的操作方法!!
1、一台电脑如果一天不关机,大约消耗0.3度电。 一般一台电脑的功耗约为250-400W(台式机)。 一台电脑每月的耗电量:如果是每小时300W每天10小时每月30天90KW,即90千瓦时的电。 这只是保守估计。 2、使用完毕后正常关闭…...
如何在Spring Boot应用中进行文件预览?
在Spring Boot应用中实现文件预览功能,具体方法取决于文件的类型和你想如何预览它们。以下是一些常见文件类型的预览方法: 1. **图片预览**: 对于图片文件,你可以直接在HTML页面中通过<img>标签的src属性引用图片的URL来…...
阿里云4核16G服务器多少钱?幻兽帕鲁配置报价
2024阿里云幻兽帕鲁专用服务器价格表:4核16G幻兽帕鲁专用服务器26元一个月、149元半年,默认10M公网带宽,8核32G幻兽帕鲁服务器10M带宽价格90元1个月、271元3个月。阿里云提供的Palworld服务器是ECS经济型e实例,CPU采用Intel Xeon …...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
