使用AOP 自动打印方法进出, 耗时 logger
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
注解:
/** * ************************************************************************* * <PRE> * @ClassName: : Mylog * * @Description: : 自定义注解, 实现对方法的进 出 ,运行时间 打印logger, * * @Creation Date : 8 Aug 2019 3:02:36 PM * * @Author : Sea * * * </PRE> ************************************************************************** */ @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface Mylog { String value() default ""; }
切片:
@Aspect @Component public class MylogAspect { private static Logger logger = LoggerFactory.getLogger(MylogAspect.class); @Around("@annotation(Mylog)") // 作用到注释@Mylog标记的方法上 public Object handleSeaAnnotionAOPMethod(ProceedingJoinPoint joinPoint, Mylog Mylog) throws Throwable { long start = System.currentTimeMillis(); // 获取方法的 全类名 com.sea.controller.XXXcontroller.getdate() MethodSignature signature = (MethodSignature) joinPoint.getSignature(); String className = signature.getDeclaringType().getSimpleName(); // 获取注解作用方法名 eg:getdata String methodName = joinPoint.getSignature().getName(); // 获取方法-- // Method method = joinPoint.getTarget().getClass().getMethod(methodName, signature.getParameterTypes()); // Method method = getMethod(joinPoint); logger.info("&&&&&& enter into the class {} -> method {} &&&&&&", className, methodName); // ################################################################ Object object = joinPoint.proceed(); System.err.println(className); long end = System.currentTimeMillis(); logger.info("&&&&&& end the class {} -> method {} &&&&&&", className, methodName); logger.info(" ^^^^^^^^^run the method {} total cost time : {} ms ^^^^^^^^",methodName, (end - start)); return object; }}
Test:
@GetMapping("/get") @Mylog public String getData() { return "nihao"+ UUID.randomUUID(); }
结果: .....
标签:
自定义注解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?