springboot 中Aop注解切面实现收集日志与统计耗时2

news2024/9/21 19:03:17

一  Aop注解实现切面

1.1 工程结构

@Before:前置通知, 在方法执行之前执行
@Aroud:环绕通知, 围绕着方法执行
@After:后置通知, 在方法执行之后执行
@AfterReturning:返回通知, 在方法返回结果之后执行
@AfterThrowing:异常通知, 在方法抛出异常之后

1.2 定义切面注解

1.核心代码阐述

@Pointcut("execution(public * com.ljf.springboot.mybaits.demos.controller..*(..))")
public void allController() {
}

在com.ljf.springboot.mybaits.demos.controller中所有类的所有方法执行时,触发切面逻辑。

2.代码如下:

package com.ljf.springboot.mybaits.demos.config;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;

/**
 * @ClassName: LogAop
 * @Description: TODO
 * @Author: admin
 * @Date: 2024/03/21 23:45:14 
 * @Version: V1.0
 **/
@Aspect
@Slf4j
@Component
public class LogAop {

    /**
     * 定义切入点,切入点为com.lluozh.fagent.controller中的所有函数
     *通过@Pointcut注解声明频繁使用的切点表达式
     */
    @Pointcut("execution(public * com.ljf.springboot.mybaits.demos.controller..*(..))")
    public void allController() {
    }

    /**
     * @description  在连接点执行之前执行的通知
     */
    @Before("allController()")
    public void doBeforeGame(){
        System.out.println("====》 before 在连接点执行之前执行的通知。。。");
    }

    /**
     * @description  在连接点执行之后执行的通知(返回通知和异常通知的异常)
     */
    @After("allController()")
    public void doAfterGame(){
        System.out.println("====》 after! 在连接点执行之后执行的通知(返回通知和异常通知的异常)");
    }

    /**
     * @description  在连接点执行之后执行的通知(返回通知)
     */
    @AfterReturning("allController()")
    public void doAfterReturningGame(){
        System.out.println("===》 after 在连接点执行之后执行的通知(返回通知)");
    }

    /**
     * @description  在连接点执行之后执行的通知(异常通知)
     */
    @AfterThrowing("allController()")
    public void doAfterThrowingGame(){
        System.out.println("===》 after 在连接点执行之后执行的通知(异常通知)");
    }

    /**
     * @description 参数必须是ProceedingJoinPoint,通过该对象的proceed()方法来执行目标函数
     * proceed()的返回值就是环绕通知的返回值,proceedingJoinPoint是个接口
     * implement JoinPoint,所以也可以获得目标函数的类名,方法名等参数
     */
    @Around("allController()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
        String requestArgs = Arrays.toString(pjp.getArgs());
        String requestURI = request.getRequestURI();
        log.info("====》URI:{}, 参数:{}", requestURI, requestArgs);
        Object result = pjp.proceed();
        log.info("=====》URI:{}, 返回: {}", requestURI, result);
        return result;
    }
}

1.3 测试效果

1.调用controller中的方法

2. 请求结果

3.查看日志

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

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

相关文章

su怎么做展厅模型---模大狮模型网

要在SketchUp中创建展厅模型,你可以按照以下基本步骤进行: 绘制基本结构: 使用SketchUp的绘图工具(线条、矩形、圆形等)来创建展厅的基本结构,包括墙壁、地板和天花板等。确保按照实际尺寸和比例进行绘制。 添加家具和展品&…

vue学习日记18:data是一个函数组件通信

一、data是一个函数 1.概念 2.代码 相互独立互不影响 二、组件通信 1.概念 (1)什么是组件通信 (2)不同组件关系和组件通信方案分类 (3)组件通信解决方案 (4)父子通信流程图 -…

CrossOver虚拟机软件2024中文版最新功能介绍

CrossOver是一款由CodeWeavers公司开发的,运行在Mac和Linux操作系统下,能够模拟Windows系统应用运行环境的软件。它不需要用户单独安装Windows操作系统,就能让Windows平台上的应用程序在Mac和Linux上顺畅运行。CrossOver在技术上使用了Wine&a…

鸿蒙开发之了解ArkTS

鸿蒙开发者官网 : https://developer.huawei.com/consumer/cn/ 开发鸿蒙要用的软件是 DevEco Studio ArkTS建立在JS和TS的基础之上,扩展了声明式UI开发范式和状态管理,提供更简洁和自然的开发方式。 ArkTS引入了渲染引擎的增强&#xff0c…

第 1 章.提示词:开启AI智慧之门的钥匙

什么是提示词? 提示词,是引导语言模型的指令,让用户能够驾驭模型的输出,确保生成的文本符合需求。 ChatGPT,这位文字界的艺术大师,以transformer架构为基石,能轻松驾驭海量数据,编织…

office办公技能|word中的常见使用问题解决方案2.0

一、设置多级列表将表注从0开始,设置为从1开始 问题描述:word中插入题注,出来的是表0-1,不是1-1,怎么办? 写论文时,虽然我设置了“第一章”为一级标题,但是这三个字并不是自动插入的…

【Docker】Docker安全与最佳实践:保护你的容器化应用程序

欢迎来到英杰社区: https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区: https://bbs.csdn.net/topics/617897397 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步&#xff…

GEE显示研究区sentinel-2每年可用影像

第一次使用GEE,用了别人的代码,想查看每年影像可用数量,但是老是报错,说是null geometry,之前我是用GAMMA软件导出的kml文件,后面在arcgis自己勾画了sho文件,线类型,然后我就在想会不…

AI 工具到底要怎么用,老板才满意?

AI 大模型(GPT-3.5)从问世到现在广泛应用,已经一年多时间,去年 8 月,我们曾经探讨过“有了 AI 大模型,人工客服就没用了?”这个话题,彼时百模大战如火如荼,AI 创业公司风…

Vant Weapp小程序 van-uploader 文件上传点击无反应,删除无反应

Vant Weapp 1.0 版本开始支持van-uploader组件&#xff0c;请先确认好版本号和引用路径正确&#xff01;&#xff01; <van-uploader file-list"{{ fileList }}" deletable"{{ true }}" />1. 上传无反应 微信小程序用了van-uploader&#xff0c;但是…

kubernetes-k9s一个基于Linux 终端的集群管理工具

效果预览 下载 github 版本 此文档使用的版本是 v0.32.4&#xff0c;下载地址&#xff1a; https://github.com/derailed/k9s/releases/download/v0.32.4/k9s_linux_amd64.rpm 安装 rpm -ivh k9s_linux_amd64.rpm使用 启动 终端直接执行命令 k9s k9s基本操作 1 选择目…

进程状态究竟是什么?在Linux操作系统中具体存在哪些进程状态?

进程状态究竟是什么&#xff1f;在Linux操作系统中具体存在哪些进程状态&#xff1f; 前言一、操作系统中的进程状态1.1 运行状态1.2 阻塞状态和唤醒1.3 挂起状态 二、Linux操作系统中具体进程状态Linux中的进程状态种类2.1 R运行状态&#xff08;running&#xff09;2.2 前台进…

#GIT|Git Flow#Gitflow工作流程

Gitflow是一种使用功能分支和多个主分支的Git分支模型&#xff0c;它适用于有预定发布周期的项目&#xff0c;也适用于DevOps最佳实践中的持续交付。这个工作流程不会添加任何新的概念或命令&#xff0c;而是为不同的分支分配了非常具体的角色&#xff0c;并定义了它们应该如何…

什么是正向代理和反向代理?

从字面意思上看&#xff0c;代理就是代替处理的意思&#xff0c;一个对象有能力代替另一个对象处理某一件事。 代理&#xff0c;这个词在我们的日常生活中也不陌生&#xff0c;比如在购物、旅游等场景中&#xff0c;我们经常会委托别人代替我们完成某些任务。在技术领域&#…

官宣子品牌艾荷,坚定数字化赋能,鸿雁2024新春发布会助推40多年央企品牌焕新升级

3月25日&#xff0c;一场以“春江水暖雁先飞”为主题的2024鸿雁电器智能物联战略及新品发布会在杭州盛大召开。鸿雁电器总裁王米成、副总裁吴明、副总裁夏晓衍、市场部总经理梁彩雷、五金水暖渠道部总经理刘亮、灯饰与智能家居渠道部总经理王育炳等公司领导出席&#xff0c;以及…

SpringMvc之映射器HandlerMapping

简介 在springmvc的处理流程中&#xff0c;第一步就是查询请求对应的映射器&#xff0c;然后组装成处理器链处理请求&#xff0c;本文意在梳理该过程 重要实现 HandlerMapping是一个接口&#xff0c;该接口用于通过HttpServletRequest寻找对应的处理器&#xff0c;接口介绍如下…

super的使用细节

1、super的使用细节 2、super和this的比较

Git_.gitignore文件相关知识

.gitignore 作用&#xff1a;指明不对哪些文件进行版本控制。 应当忽略哪些文件&#xff1f; 系统或软件自动生成的文件编译时产生的中间文件和结果文件运行时产生的日志文件&#xff0c;临时文件和缓存文件涉及身份&#xff0c;密码&#xff0c;口令&#xff0c;秘钥等敏感…

Spring Boot | SpringBoo“开发入门“

目录 : 1.SpringBoot的“介绍”SpringBoot”概述” &#xff1a;SpringBoot”简介“SpringBoot的“优点” 2. SpringBoot入门程序环境准备使用 “Maven”方式构建SpringBoot 项目使用“Spring Initializr”方式构建Spring Boot 项目 3. “单元测试” 和“热部署”单元测试热部署…

银行单元化架构体系介绍

1.背景 自2018年以来&#xff0c;受“华为、中兴事件”影响&#xff0c;我国科技受制于人的现状对国家稳定和经济发展都提出了严峻考验。目前我国IT架构体系严重依赖国外产品&#xff0c;金融行业尤其明显。大部分传统银行的关键账务系统都架设在IBM的大型机、小型机之上&…