当前位置: 首页 > news >正文

【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,所以这里不做过多讲解。只是进行简单解释

代码解释如下:

  1. @Aspect:标识这是⼀个切⾯类

  2. @Around:环绕通知,在⽬标⽅法的前后都会被执⾏.后⾯的表达式表⽰对哪些方法进行增强.

  3. ProceedingJoinPoint.proceed()让原始方法执行,并返回一个值

  4. 该方法最后需要返回一个值,也就是执行原始方法所接受的值

整个代码划分为三部分
在这里插入图片描述

接下来我们运行程序来观察一下效果

运行程序,观察日志如下:
在这里插入图片描述

我们通过AOP⼊门程序完成了业务接执行耗时的统计.

通过上面的程序,我们也可以感受到AOP面向切⾯编程的⼀些优势:

  • 代码⽆侵⼊:不修改原始的业务方法,就可以对原始的业务方法进行了功能的增强或者是功能的改变

  • 减少了重复代码

  • 提高开发效率

  • 维护方便

⭕总结

关于《【JavaEE进阶】 Spring AOP快速上手》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

http://www.lryc.cn/news/308056.html

相关文章:

  • android应用开发基础知识,安卓面试2020
  • unity-unity2d基础操作笔记(一)0.5.0
  • 东芝工控机维修东芝电脑PC机维修FA3100A
  • AI新秀Mistral:“Open AI“ 新时代
  • Dockerfile制作镜像
  • 如何在宝塔面板中设置FTP文件传输服务并实现远程文件管理
  • 记录 | 设置容器内外时间一致
  • LeetCode 239 滑动窗口最大值
  • Vue单文件组件(SFC)规范
  • 简单版 git快速上手使用 clone项目 新建/切换分支 提交修改
  • 本届挑战赛季军方案:基于图网络及LLM AGENT的微服务系统异常检测和根因定位方法
  • 【MySQL】_内连接
  • ElasticSearch之跨集群搜索cross cluster search
  • 06|Mysql内部组件结构
  • 文件的写出操作
  • 使用gitlab搭建npm的依赖库,并在项目中使用
  • 如何让电脑待机而wifi不关的操作方法!!
  • 如何在Spring Boot应用中进行文件预览?
  • 阿里云4核16G服务器多少钱?幻兽帕鲁配置报价
  • el-autocomplete 提示文字出不来?修改支持模糊搜索提示
  • CentOS8 同步时间chrony ntpdate已无法使用
  • NFS服务器挂载失败问题
  • (Linux学习二)文件管理基础操作命令笔记
  • Docker本地部署GPT聊天机器人并实现公网远程访问
  • html2canvas + JsPDF.js 导出pdf分页时的问题
  • Linux系统Docker部署StackEdit Markdown并实现公网访问本地编辑器
  • 从Spring Boot应用上下文获取Bean定义及理解其来源
  • 如何处理网络攻击对系统造成的损害?
  • 数字IC后端设计利器 - 《Innovus的基本使用流程和命令》(附下载)
  • Blender中四种不同的几何体类型(网格、曲线、体积和实例 )