aop获取方法运行时间

@Slf4j
@Component
@Aspect//aop类
public class TimeAspect {/*Around 环绕通知  用ProceedingJoinPoint
@Before 前置通知  用JoinPoint(是ProceedingJoinPoint的父类型),用它可以获得方法执行的相关信息,如目标类名,方法名,方法参数
@After 后置通知  用JoinPoint   ,jpinPoint.getTargrt(),getClass().getName();(获取目标类名)
@AfterReturning 返回后通知  用JoinPoint  ,jpinPoint.getSignstrue();(获取目标方法签名)
*@AfterThrowing 异常后通知  用JoinPoint    ,jpinPoint.getSignature().getName();(获取目标方法名),jpinPoint.getArgs();(获取目标方法运行参数)*/
//@annotation切入点表达式,用于匹配有特点注解的方法//@annotation(com.itheima.aop.MyLog)仅仅匹配上面加有@MyLog注解的方法//execution切入点表达式,主要根据方法的返回值,包名,类名,方法名,方法参数等信息来匹配
// 例如:execution(void com.itheima.service.impl.empserviceimpl.getById(java.lang.Integer));execution切入点表达式@Around("execution(* com.itheima.service.*.*(..))") //切入点表达式public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable {long begin=System.currentTimeMillis();Object result = joinPoint.proceed();//目标方法放行long end =System.currentTimeMillis();
log.info(joinPoint.getSignature()+"方法执行耗时:{}ms",end-begin);return result;}}

==================================================================================================================================================案例:

记录表:

-- 操作日志表
create table operate_log(id int unsigned primary key auto_increment comment 'ID',operate_user int unsigned comment '操作人ID',operate_time datetime comment '操作时间',class_name varchar(100) comment '操作的类名',method_name varchar(100) comment '操作的方法名',method_params varchar(1000) comment '方法参数',return_value varchar(2000) comment '返回值',cost_time bigint comment '方法执行耗时, 单位:ms'
) comment '操作日志表';
OperateLog实体类:

OperateLogMapper接口:

注解Log:(不要忘记去对应方法上加@Log注解,否则@annotation无效)

LogAspect切面类:

{@Autowiredprivate HttpServletRequest request;@Autowired
private OperateLogMapper operateLogMapper;@Around("@annotation(com.itheima.anno.Log)")public Object recordLog(ProceedingJoinPoint joinPoint) throws Throwable {//当前登陆人ID(获取请求头中的jwt令牌,解析令牌获取id)String jwt = request.getHeader("token");Claims claims = JwtUtils.parseJWT(jwt);Integer operateUser=(Integer) claims.get("id");//操作时间LocalDateTime operaTime = LocalDateTime.now();//操作类名String className = joinPoint.getTarget().getClass().getName();//操作方法名String methodName = joinPoint.getSignature().getName();//操作方法参数Object[] args = joinPoint.getArgs();String methodParams= Arrays.toString(args);long begin = System.currentTimeMillis();//调用原始目标方法运行Object result = joinPoint.proceed();long end = System.currentTimeMillis();//操作方法返回值String returnValue = JSONObject.toJSONString(result);//操作耗时long costTime = end - begin;//记录操作日志OperateLog operateLog = new OperateLog(null,operateUser,operaTime,className,methodName,methodParams,returnValue,costTime);operateLogMapper.insert( operateLog);log.info("AOP记录操作日志:{}",operateLog);
return result;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WordPress 管理员密码重置方法汇总

最近明月碰到一个 WordPress 站长求助咨询,说是自己 WordPress 站点的管理员密码被恶意篡改了,对 WordPress 了解的都知道这一般都是恶意代码造成的,问题大多出在使用了所谓的破解版、去授权版的插件或者主题被植入了恶意代码、后门木马。明月…

Android Studio Please select Android SDK

解决方案: 1、打开 SDK Manager 2、选择编辑(Edit) 3、 一直Next,直到完成,解决!

大数据在IT行业的应用与发展趋势及IT行业的现状与未来

大数据在IT行业中的应用、发展趋势及IT行业的现状与未来 一、引言 随着科技的飞速发展,大数据已经成为IT行业的重要驱动力。从数据收集、存储、处理到分析,大数据技术为各行各业带来了深远的影响。本文将详细探讨大数据在IT行业中的应用、发展趋势&#…

R语言数据分析案例-股票题目分析

Value at Risk(VaR)是一种统计技术,用于量化投资组合在正常市场条件下可能遭受的最大潜在损失。它是风险管理和金融领域中一个非常重要的概念。VaR通常以货币单位表示,用于估计在给定的置信水平和特定时间范围内,投资组…

嵌入式开发场景下怎么防止源代码泄密

在当今数字化时代,嵌入式系统在各行各业中扮演着至关重要的角色,从智能家居到工业自动化,都离不开这些嵌入式设备的支持。然而,随之而来的是对嵌入式代码安全的日益关注。在嵌入式开发场景下,代码的保护至关重要&#…

《建筑抗震设计规程》DB62/T 3055-2020下载

本规程适用于抗震设防分类为乙类、丙类,抗震设防烈度为6度(0.05g)、7度(0.10g、0.15g)、8度(020g、030g)、9度(0.40g)的多高层钢筋混凝土结构及钢-混凝土混合结构、中等跨度钢屋盖结构、门式刚架钢结构、多低层砖砌体结构房屋建筑的抗震设计。 关于甘肃省地方标准《…

Alist + RaiDrive-Nas挂载云盘(Quark)

Alist RaiDrive-Nas挂载云盘(Quark) Alist download Alist document RaiDriver download — https://www.raidrive.com/ nssm download nssm document nssm specification 配置 Alist 下载适合的Alist版本后,启动服务; 需使用命令符。 在完成解…

Pytorch 与 Tensorflow:深度学习的主要区别(1)

引言 目前,Python 深度学习领域已经涌现出多个由科技界巨头如 Google、Facebook 和 Uber 等公司公开发布的框架,这些框架旨在帮助开发者构建先进的计算架构。对于刚接触这一领域的你来说,深度学习是计算机科学中的一个分支,它通过…

业绩复苏,第二座12英寸晶圆厂预计年底投产 | 百能云芯

在经历了2023年四季度的业绩波动后,华虹半导体终于在2024年一季度展现了业绩的复苏迹象。根据华虹半导体最新公布的财报,今年一季度的销售收入和毛利率均实现了环比增长,尽管与去年同期相比仍有下滑,但市场对公司前景的乐观预期正…

后端项目开发笔记

Maven打包与JDK版本不对应解决方法 我这里使用jdk8。 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configurat…

【数据结构】有关栈和队列相互转换问题

文章目录 用队列实现栈思路实现 用栈实现队列思路实现 用队列实现栈 Leetcode-225 用队列实现栈 思路 建立队列的基本结构并实现队列的基本操作 这部分这里就不多说了&#xff0c;需要的可以看笔者的另一篇博客 【数据结构】队列详解(Queue) 就简单带过一下需要实现的功能 …

1070: 邻接矩阵存储简单路径

解法&#xff1a; #include<iostream> #include<vector> using namespace std; int arr[100][100]; int n; int sta, des; vector<int> path; vector<vector<int>> res; void dfs(vector<int> &a,int i) {a[i] 1;path.push_back(i);…