aop时什么,用时统计怎么开发

news2024/9/22 9:49:00

spring aop,作用:可以对service层代码进行监听,统计每个方法用时

aop是什么:面向切面编程(aop开发出来的代码)

用在哪里:(压测/提效)

        1.controller层方法用时不用统计,核心都在服务层代码(得到参数立马调服务层)
        2.服务层方法用时统计,若时间长说明代码的业务逻辑复杂,计算量大或代码有瓶颈。总之时间长就说明此方法有问题

符合要求的时间就跳过,超过指定阀值(200毫秒)时间再打印出结果

步骤:

切面类先随项目启动--服务层类进行监听---调用前开始计时-- controller调用service,并返回结果--调用后结束技术

  1. 切面类随项目启动 --在类上定义注解类@Aspect+@Configuration ;(@Aspect说明此类是切面类,@Configuration是让切面类随项目启动)
  2. 再对服务层类下的所有方法监听--定义@Pointcut对应的方法,对服务层下的所有类和方法进行监听
  3. 调用前开始计时---用@Around绑定切点,进行调用前的开始计时
  4. controller调用service,并返回结果---controller调用service并返回结果,引入ProceedingJoinPoint类,用joinPoint调用这个方法proceed();返回结果
  5. 调用后结束技术---调用后结束计时,统计时间差
  6. 打印xx方法,用时xx毫秒--
  7. 引入@Data和@ConfigurationProperties注解+并定义alarmTime

注解相关:
    @Aspect   切面类注解
    @Pointcut 切点注解,作用是对服务层下的所有类和方法进行监听; 变量:value定义切点规则,规则是execution(修饰符匹配? 返回值匹配 类路径匹配? 方法名匹配(参数匹配) 异常类型匹配?);
    @Around   环绕注解,作用是对服务层方法调用前计时,方法运行后统计结束时间,最后可算出时间差
    @Before   作用是对服务层方法调用前的操作

监听value值里填写规则,规则类型是返回值匹配

 

调用前计时 

controller调用service,并返回结果 

 增加结束时间endtime结束时间-开始时间=用时统计,打印用时

打印类,方法,参数,用时,先进行获取监听的类classname等

 优化可以这样写

测试

因为返回类型是void,所以报错了500代码写错也会报错

 更改返回类型为object,不知道什么类型的时候写父类,后续加return

测试


符合要求的时间就跳过,超过指定阀值(200毫秒)时间再打印出结果

初始化一个阀值

 

设置变量

增加注解增加配置文件,data是代替set/get方法

用时统计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1990286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue+Vite+Element Plus基础操作

Vue.js 是一个流行的前端框架,‌而 Vite 是一个快速构建前端应用的新型开发服务器和构建工具,‌两者结合可以显著提升开发效率和体验。‌ Vue.js 是一个用于构建用户界面的渐进式框架,‌它易于上手且功能强大。‌Vue 的核心库只关注视图层&a…

前端构建工具|vite快速入门

认识vite vite组成部分 Vite是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成: 一个开发服务器,它基于 原生 ES 模块 提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMR)。一…

DERPNSTINK: 1-打靶渗透【附代码】(权限提升)

DerpNStink 靶机下载地址: https://www.vulnhub.com/entry/derpnstink-1,221/#downloadhttps://www.vulnhub.com/entry/derpnstink-1,221/#download 1. 主机发现端口扫描目录扫描操作系统等信息收集 1.1. 主机发现 nmap -sn 192.168.7.0/24|grep -B 2 08:00:27…

Rabbit高级特性 - 消息重试机制(两种实现)

文章目录 消息重试机制概述实现方式一:基于消息手动确认机制,返回 nack 实现配置文件交换机、队列、绑定生产者接口消费者演示和结论 实现方式二:基于重试配置实现配置文件交换机、队列、绑定生产者接口消费者演示和结论 消息重试机制 概述 …

对深度学习神经网络做了小改进,效果提升明显,可以发论文吗?

小改了深度学习神经网络某一层,效果提升显著,可以发顶会吗? 结论就是,当然可以发,只是能不能发出高质量论文,中稿顶会,还得看你这个小改进的具体情况还有你讲故事的能力。 先说改进的具体情况…

国家统计局中国主要城市面板数据(1990-2023年)

数据说明:数据来源于国家统计局,指标包含:城市、年份、第三产业增加值、第一产业增加值 地区生产总值、第二产业增加值、年末户籍人口、城镇非私营单位在岗职工平均工资 房地产开发投资额、房地产开发住宅投资额、房地产开发办公楼投资额、房…

什么是股指期权与股指期货的套利策略?

沪深300股指期权和沪深300股指期货就像是孪生兄弟,它们不仅到期时间一样,结算价格也一样,而且都是现金结算。这意味着,如果你用期权的方式“造”出一个期货来,跟市场上真实交易的期货,在到期那天&#xff0…

Eclipse 首选项(Preferences)

设置首选项 该对话框可通过框架管理但是其他插件可以设置其他页面来管理首选项的配置。 我们可以通过 Window 菜单选择 Preferences 菜单项来开启该对话框。 首选项页面有多个分类组成。你可以在左侧菜单中展开各个节点来查看首选项的配置。 左上角的输入框可以快速查找首选…

#子传父父传子props和emits #封装的table #vue3

#子传父&父传子props和emits #封装的table #vue3 父组件&#xff1a;emits defineEmits props 子组件&#xff1a; 子组件 <template><el-table v-bind"$attrs" ref"innerTableRef" v-loading"loading" border :data"tabl…

鸿蒙HarmonyOS开发:如何灵活运用动画效果提升用户体验

文章目录 一、动画概述1、动画的目的 二、显式动画 (animateTo)1、接口2、参数3、AnimateParam对象说明4、示例5、效果 三、属性动画 (animation)1、接口2、参数3、AnimateParam对象说明4、系统可动画属性4、示例5、效果 一、动画概述 动画的原理是在一个时间段内&#xff0c;…

QT使用ui文件创建窗口

目录 带ui文件 添加状态栏 资源文件的使用 添加文件资源 使用文件资源 带ui文件 编辑 添加状态栏 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);// 添加状态栏ui->statusbar->addWidget(new QLab…

codeforces查看题解

文章目录 1. 步骤一&#xff1a;右键单击箭头指向位置&#xff0c;根据提示打开链接2. 步骤二&#xff1a;左键单击箭头指向位置3. 结果&#xff1a;红线上方是参考代码&#xff0c;下方是测试样例4. 补充&#xff1a;① 右边这个方框可以筛选想要查看代码的状态(Accepted、Wro…

AI在医学领域:残差扩散模型预测特发性肺纤维化 (IPF)

关键词&#xff1a; IPF 进展预测、残差扩散模型、临床信息 特发性肺纤维化&#xff08;Idiopathic Pulmonary Fibrosis&#xff0c;IPF&#xff09;是一种严重且不可逆的肺部疾病&#xff0c;它会导致肺部组织出现瘢痕和增厚&#xff0c;从而引起呼吸困难。。及时对IPF进行治…

Unity入门4——常用接口

C#中常用类和接口 DateTime&#xff1a;表示某个时刻 DateTime.Now&#xff1a;拿到系统当前时间DtaTime.TimeOfDay&#xff1a;获取此实例当天的时间 Quaternion&#xff1a;用来旋转&#xff0c;采用四元数&#xff0c;由w&#xff08;实部&#xff09;和x,y,z&#xff08;虚…

ChinaJoy 2024: 维塔士携自研游戏亮相,探讨数据驱动游戏开发

2024年7月30日,上海——全球领先的视频游戏开发公司维塔士精彩亮相第二十一届中国国际数码互动娱乐展览会(ChinaJoy),并首次公开自研游戏《唐传奇:琵琶行》DEMO试玩。在展会首日举办的2024中国游戏开发者大会(CGDC)上,来自维塔士西安工作室的执行制作人熊鹏昱受邀发表题为《维塔…

springboot的拦截器,监听器,过滤器,servlet的使用(三大组件)

目录 1. 拦截器1.1 简介1.2 使用 2. 监听器2.1 简介2.2 使用 3. 过滤器3.1 简介3.2 使用 4. servlet4.1 简介4.2 使用 5. 例子6. 心得 1. 拦截器 1.1 简介 Spring Boot 拦截器&#xff08;Interceptor&#xff09;是Spring MVC中用于在请求处理流程中执行某些操作的组件。它们…

Open3D 三维重建-Alpha Shapes (α-形状)

目录 一、概述 1.1原理 1.2实现步骤 二、代码实现 2.1关键函数 2.1.1函数 2.1.2参数详解 2.2完整代码 三、实现效果 3.1原始点云 3.2处理后点云 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新…

08-PCB工程文件的创建

1.创建工程文件 2.创建原理图库 3.创建PCB元件库 4.创建原理图 5.创建PCB 6.改名&#xff0c;保持和项目名一致 最后save。

uniapp获取swiper中子组件的内容高度

swiper有默认高度,如果不单独设置一个具体高度&#xff0c;swiper后面的内容将不会展示 这里展示的例子是: swiper中放有一个子组件,想要完整展示子组件的内容&#xff0c;swiper就需要获取到子组件的内容高度并设置 <!-- 注意: 这里的单位是 px,不是rpx --><swiper…

【STM32】IO口取反 | 寄存器方式 | 异或运算符 | 原理

目录 STM32 IO口取反 | 寄存器方式 | 异或运算符 | 原理1. 引言2. GPIO基础知识2.1 GPIO概述2.2 STM32的GPIO架构2.3 GPIO寄存器简介 3. GPIO引脚取反原理3.1 寄存器操作实现取反3.2 异或运算符的应用 4. 示例代码4.1 基础示例&#xff1a;LED闪烁4.2 应用实例&#xff1a;继电…