基于AspectJ自定义注解
1 package com.aspectj.demo.aspect; 2 3 import java.lang.annotation.ElementType; 4 import java.lang.annotation.Retention; 5 import java.lang.annotation.RetentionPolicy; 6 import java.lang.annotation.Target; 7 8 @Retention(RetentionPolicy.RUNTIME) 9 @Target(ElementType.METHOD) 10 public @interface MonitorMethod { 11 String value() default ""; 12 }
1 package com.aspectj.demo.aspect; 2 3 import java.lang.reflect.Method; 4 5 import org.aspectj.lang.ProceedingJoinPoint; 6 import org.aspectj.lang.annotation.Around; 7 import org.aspectj.lang.annotation.Aspect; 8 9 @Aspect 10 public class MethodExecutionTime { 11 12 // @Around("execution(* *.*(..)) && @annotation(com.aspectj.demo.aspect.MonitorMethod)") 13 @Around("execution(* *.*(..)) && @annotation(method)") 14 public Object profile(ProceedingJoinPoint pjd,MonitorMethod method) throws Throwable { 15 Object result = null; 16 System.out.println(method.value()); 17 // 这里可以获取方法名 18 System.out.println(pjd.getSignature().getName()); 19 System.out.println(pjd.getTarget()); 20 // 获取方法名 21 Method[] methods = pjd.getSignature().getDeclaringType().getMethods(); 22 System.out.println(methods[0]); 23 24 // 获取参数信息 25 Object[] args = pjd.getArgs(); 26 for (Object o : args) { 27 System.out.println(o.toString()); 28 } 29 try { 30 // System.out.println("前置通知"); 31 result = pjd.proceed(); 32 // System.out.println("后置通知"); 33 } catch (Throwable e) { 34 // System.out.println("异常通知"); 35 } 36 // System.out.println("返回通知"); 37 return result; 38 } 39 }
1 package com.aspectj.demo.aspect; 2 3 public class StockService { 4 5 @MonitorMethod(value="1111111111") 6 public String getBaseInfo(String a) { 7 try { 8 Thread.sleep(500); 9 } catch (InterruptedException e) { 10 e.printStackTrace(); 11 } 12 return ""; 13 } 14 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人