springboot中的AOP以及面向切面编程思想
快速入门体验AOP
aop中相关概念
实现导入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
新建aop文件夹,里面声明XXXAspect类
@Aspect // 声明一个aop类
@Component
public class RecordTimeAspect {private static final Logger log = (Logger) LoggerFactory.getLogger(RecordTimeAspect.class);// 切入点表达式@Around("execution(* com.managerweb.service.ServiceImpl.*.*(..))") // 测试业务层的所有方法public Object RecordTime(ProceedingJoinPoint pjp) throws Throwable {long begin = System.currentTimeMillis();Object result = pjp.proceed(); // 这表示执行所有@Around里声明的方法long end = System.currentTimeMillis();// getSignature()获取方法名称log.info("方法{}运行时间为{}",pjp.getSignature(), (end - begin));return result;}
}
AOP的底层原理:动态代理
通知
根据通知方法执行时机的不同,将通知类型分为以下常见的五类:
- @Around: 环绕通知,此注解标注的通知方法在目标方法前、后都被执行
- @Before: 前置通知,此注解标注的通知方法在目标方法前被执行
- @After: 后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行
- @AfterReturning: 返回后通知,此注解标注的通知方法在目标方法返回后执行,有异常不会执行
- @AfterThrowing: 异常后通知,此注解标注的通知方法发生异常时执行
- 注意1:@Around环绕通知需要自己调用 ProceedingJoinPoint.proceed() 来让原始方法执行,其它通知不需要考虑目标方法执行
- 注意2:@Around环绕通知方法的返回值,必须指定为Object,以接收目标方法的返回值。
抽取切入点表达式
抽取的原因:由于切入点表达式总是出现,为了简化,在最开始时将切入点表达式抽取出来
具体使用如下
@Pointcut("execution(* com.managerweb.service.ServiceImpl.*.*(..))")private void pt(){}@Around("pt()") // 测试业务层的所有方法public Object RecordTime(ProceedingJoinPoint pjp) throws Throwable {long begin = System.currentTimeMillis();Object resu
相关文章:

springboot中的AOP以及面向切面编程思想
快速入门体验AOP aop中相关概念 实现导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 新建aop文件夹,里面声明XXXAspect类 @Aspect // 声…...

降低Mobx技术债问题-React前端数据流方案调研整理
我们现在主要是使用Mobx,但是Mobx的易于上手和灵活度也带来了很多预期以外的问题,随着项目的增长我们的代码技术债变得愈加沉重,不同的模块杂糅一起、单一store无限膨胀。 为此我们的调研是希望能找到一个更好的state配置、数据流的约定方案。…...

RabbitMQ消息可靠性保证机制7--可靠性分析-rabbitmq_tracing插件
rabbitmq_tracing插件 rabbitmq_tracing插件相当于Firehose的GUI版本,它同样能跟踪RabbitMQ中消息的注入流出情况。rabbitmq_tracing插件同样会对流入流出的消息进行封装,然后将封装后的消息日志存入相应的trace文件中。 # 开启插件 rabbitmq-plugins …...
SQL进阶技巧:如何求解直接线上最多的点数?
目录 0 问题描述 1 数据准备 2 问题分析 3 求解优化 步骤一:构建 “斜率键” 并统计点的数量(核心步骤) 步骤二:找出最多的点数(最终结果) 0 问题描述 “平面上最多的点数” 问题通常是指在一个二维平面中给定了若干个点的坐标(例如以 (x,y) 的形式表示),要求找…...

【老白学 Java】泛型应用 - 卡拉 OK(四)
泛型应用 - 卡拉 OK(四) 文章来源:《Head First Java》修炼感悟。 上文说到,解决了按歌名排序的问题后,老白立刻想到了按歌手名字排序的问题。 老白决定趁热打铁,尝试着实现自定义排序方式。 Collections…...

android studio更改应用图片,和应用名字。
更改应用图标,和名字 先打开AndroidManifest.xml文件。 更改图片文件名字( 右键-->构建-->重命名(R))...
SQL Server 表值函数使用示例
在 SQL Server 中,表值函数(Table-Valued Functions, TVFs)是一种用户定义函数,它可以返回一个表。表值函数有两种类型:内联表值函数(Inline Table-Valued Function)和多语句表值函数(Multi-Statement Table-Valued Function)。下面分别介绍这两种类型的表值函数及其使…...

SpringBoot项目的创建方式
目录 1.通过idea创建SpringBoot项目 2.在idea中通过aliyun创建SpringBoot 3.通过spring官网下载再用idea打开 5.通过mavenjava项目改为springboot项目 6.测试springboot 第二种方法使用的是idea2021版本,其余方法使用idea2017版本 1.通过idea创建SpringBoot项…...
微服务设计(第2版)读书笔记
微服务概述 什么是微服务? 答:微服务(microservice)是基于业务领域建模的,可独立发布的服务。它会把业务内聚的功能封装起来,并通过网络供其他服务访问。将这样的服务组合起来构建出更复杂的系统。 微服务…...

idea无法识别文件,如何把floder文件恢复成model
前景: 昨天,我在之前的A1214模块包下新增了一个demo类,然后又新建了一个A1216模块,写了算法题,后面打算用git提交,发现之前的A1214模块下的demo类和新建的模块源文件都已经被追踪了,都是绿色的&…...

vscode的keil assistant 中搜索不到全局变量
搜不到 但是在包含的文件中输入 ../../../,就是全局搜索的结果 我的文件结构是:\Desktop\LVGL文件系统移植(lvgl8.3)\Projects\MDK-ARM 盲猜是keil assistant 当前文件夹打开的时候是进入到了MDK-ARM文件夹层次&…...

html+css网页设计 美食 餐饮杰12个页面
htmlcss网页设计 美食 餐饮杰12个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1ÿ…...

重撸设计模式--代理模式
文章目录 定义UML图代理模式主要有以下几种常见类型:代理模式涉及的主要角色有:C 代码示例 定义 代理模式(Proxy Pattern)属于结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。 通过引入代理对象&am…...

Redis性能调优:深入剖析变慢原因及应对策略
如果观察到,这个实例的运行延迟是正常 Redis 基准性能的 2 倍以上,即可认为这个 Redis 实例确实变慢了。 1.如何查看实例的运行延迟 (1)redis-cli -h 127.0.0.1 -p 6379 --intrinsic-latency 60 执行该命令,就可以测…...
Python联合Halcon的详细教程
以下是一份Python联合Halcon的详细教程: 一、简介 Halcon是一款由德国MVTec公司开发的高级机器视觉软件,提供了一套强大的图像处理库,包括特征检测、识别、测量等功能。Python联合Halcon是一种将Python编程语言与计算机视觉库Halcon集成的应…...

raid 状态查看 storcli64
场景 当磁盘报错的时候使用该命令排查 fdisk -l /dev/sdb fdisk: cannot open /dev/sdb: Input/output error进一步使用 smartctl 排查 smartctl -a /dev/sdb 输出 smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-144-generic] (local build) Copyright (C) 2002-19, B…...

时间管理系统|Java|SSM|JSP|
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…...

使用Docker启用MySQL8.0.11
目录 一、Docker减小镜像大小的方式 1、基础镜像选择 2、减少镜像层数 3、清理无用文件和缓存 4、优化文件复制(COPY和ADD指令) 二、Docker镜像多阶段构建 1、什么是dockers镜像多阶段构建 1.1 概念介绍 1.2 构建过程和优势 2、怎样在Dockerfil…...

Qt之修改窗口标题、图标以及自定义标题栏(九)
Qt开发 系列文章 - titles-icons-titlebars(九) 目录 前言 一、修改标题 二、添加图标 三、更换标题栏 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 在我们利用Qt设计软件时,经常需要修改窗口标题、更改软…...

每天40分玩转Django:Django测试
Django测试 一、今日学习内容概述 学习模块重要程度主要内容测试基础⭐⭐⭐⭐⭐TestCase、断言方法模型测试⭐⭐⭐⭐⭐模型方法、数据验证视图测试⭐⭐⭐⭐请求处理、响应验证表单测试⭐⭐⭐⭐表单验证、数据处理覆盖率测试⭐⭐⭐⭐coverage配置、报告生成 二、测试基础示例…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...