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

Java面试题储备14: 使用aop实现全局日志打印

  1. 引入依赖

     <!-- aop --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>2.6.6</version> </dependency>
    
  2. 切面代码

@Aspect
@Component
@Slf4j
@EnableAspectJAutoProxy(proxyTargetClass = true,exposeProxy = true)
public class UmpMonitorAspect {private static String  UMP_APP_NAME = "super-applet";/*** 需要拦截的*/@Pointcut("execution(public * com.a..*.*(..)) ")public void include() {}/*** 不需要拦截的 */@Pointcut("execution(public * com.b.*.start..*(..))")public void exclude() {}/*** 切面*/@Pointcut("exclude() && !include() ||\n")public void checkAlarmAnnotation() {}@Around(value = "checkAlarmAnnotation()")public Object umpMonitorRecorder(ProceedingJoinPoint joinPoint) throws Throwable {String packageName = joinPoint.getSignature().getDeclaringTypeName();String methodName = joinPoint.getSignature().getName();String key =packageName + CommonConstants.DOT + methodName;CallerInfo info = Profiler.registerInfo(key);try {// log.debug("ump注解形式开启,key:{},umpAppName:{}", key, UMP_APP_NAME);return joinPoint.proceed();} catch (Throwable throwable) {Profiler.functionError(info);throw throwable;} finally {Profiler.registerInfoEnd(info);}}
}

通过注解

@Pointcut("execution(public * com.a….(…)) ")
切入点,后面复制需要切入的包的路径,比如此时就是要拦截所有包a下的数据请求

@Before(“com.a.controller.") - 打印接口入参
@After("com.a.controller.
”) - 打印接口出参
@Around(value = “checkAlarmAnnotation()”) - 环绕通知

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

相关文章:

  • 【HTML】document api
  • Vue 3中watch的返回值:解锁监听的隐藏技巧
  • C++---有符号和无符号整数的位移操作
  • RabbitMQ:数据隔离
  • kafka 冲突解决 kafka安装
  • Unity进阶--C#补充知识点--【Unity跨平台的原理】Mono与IL2CPP
  • 探索性测试:灵活找Bug的“人肉探测仪”
  • MongoDB Windows 系统实战手册:从配置到数据处理入门
  • keil错误:Error: failed to execute ‘D:\Keil\C51\BIN\BIN\A51.EXE‘
  • 【智慧工地源码】智慧工地云平台系统,涵盖安全、质量、环境、人员和设备五大管理模块,实现实时监控、智能预警和数据分析。
  • PYTHON让繁琐的工作自动化-猜数字游戏
  • 从数据汇总到高级分析,SQL 查询进阶实战(下篇)—— 分组、子查询与窗口函数全攻略
  • 车e估牵头正式启动乘用车金融价值评估师编制
  • CoRL 2025|隐空间扩散世界模型LaDi-WM大幅提升机器人操作策略的成功率和跨场景泛化能力
  • 从「行走」到「思考」:机器人进化之路与感知—决策链路的工程化实践
  • 第4.3节:awk正则表达式详解-特殊字符
  • Pytest测试框架基础及进阶
  • 前端css学习笔记7:各种居中布局空白问题
  • Jenkins全链路教程——Jenkins调用Maven构建项目
  • IoT/透过oc_lwm2m和at源码,分析NB-IoT通信模组和主板MCU之间的通信过程
  • 【Jenkins】03 - 自动构建和docker构建
  • 【opencv-Python学习笔记(7):图像平滑处理】
  • 删除并获得点数
  • label studio标注时序数据
  • 力扣热题100------19.删除链表的倒数第N个结点
  • 深度学习篇---卷积
  • Linux unistd.h 包含功能
  • Spring 三级缓存:破解循环依赖的底层密码
  • 使用Idea安装JDK
  • [Code Analysis] docs | Web应用前端