[Java Spring] Aspect
2023-09-14 08:59:13 时间
Create you own decreator!
Add dependency:
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.30</version> </dependency>
aspect/Loggable.java:
package com.frankmoley.lil.fid.aspect; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Loggable { }
aspect/LoggingAspect.java:
package com.frankmoley.lil.fid.aspect; import java.util.Arrays; import java.util.Collection; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Component @Aspect public class LoggingAspect { private static final Logger LOGGER = LoggerFactory.getLogger(LoggingAspect.class); @Pointcut("@annotation(Loggable)") public void executeLogging(){} @AfterReturning(value = "executeLogging()", returning = "returnValue") public void logMethodCall(JoinPoint joinPoint, Object returnValue){ StringBuilder message = new StringBuilder("Method: "); message.append(joinPoint.getSignature().getName()); Object[] args = joinPoint.getArgs(); if (null!=args && args.length>0){ message.append(" args=[ | "); Arrays.asList(args).forEach(arg->{ message.append(arg).append(" | "); }); message.append("]"); } if(returnValue instanceof Collection){ message.append(", returning: ").append(((Collection)returnValue).size()).append(" instance(s)"); }else{ message.append(", returning: ").append(returnValue.toString()); } LOGGER.info(message.toString()); } }
Using;
@Service public class GreetingService { @Value("${app.greeting}") private String greeting; public GreetingService(){ super(); } @Loggable public String getGreeting(String name){ return greeting + " " + name; } }
Around:
@Around(value = "executeLogging()") public Object logMethodCall(ProceedingJoinPoint joinPoint) throws Throwable { long startTime = System.currentTimeMillis(); Object returnValue = joinPoint.proceed(); long totalTime = System.currentTimeMillis()-startTime; StringBuilder message = new StringBuilder("Method: "); message.append(joinPoint.getSignature().getName()); message.append(" totalTime: ").append(totalTime).append("ms"); Object[] args = joinPoint.getArgs(); if (null!=args && args.length>0){ message.append(" args=[ | "); Arrays.asList(args).forEach(arg->{ message.append(arg).append(" | "); }); message.append("]"); } if(returnValue instanceof Collection){ message.append(", returning: ").append(((Collection)returnValue).size()).append(" instance(s)"); }else{ message.append(", returning: ").append(returnValue.toString()); } LOGGER.info(message.toString()); return returnValue; }
相关文章
- spring boot拦截器和过滤器_java拦截器的作用
- java scanner怎么用_Java中Scanner类的用法及使用步骤分享!「建议收藏」
- java启动器_JAVA基础:Java 启动器如何查找类
- Java与Python哪个更好?「建议收藏」
- java ee简介_Java EE 简介
- java 堆栈的声明_Java 堆栈[通俗易懂]
- java中JDBC是什么?[通俗易懂]
- db4o java,db4o Java版性能测试评估
- java运行环境配置(jdk配置)Java博客 2 年前 桃李Taoli
- java 反射getmethod_Java 反射机制中 getMethod()和getDeclaredField()区别
- Java框架Spring入门-第一个spring项目
- Spring Boot快速接入Prometheus监控|写给Java开发运维
- 【IntelliJ IDEA】使用 exe4j 生成 jre + jar 可执行文件并在 Windows 上执行 ( 不安装 jre 执行 java 程序 )
- Java监控Oracle性能的最佳实践(java监控oracle)
- 工具Linux上使用Java开发的利器:选择指南(linux选择java)
- 运行Linux中定时运行Java程序的实用方法(linux定时java)
- MySQL之Java实现主从复制(java mysql主从)
- Linux下Java命令:简介与基本用法(linux下java命令)
- Java配置Oracle实现稳定的跨平台数据库连接(java配置oracle)
- Java程序构建Oracle数据库直连(java直连oracle)
- 语句Java自动生成Oracle数据库查询语句(java生成oracle)
- Java消息处理实践突破性技术Redis(redis消息 java)
- [JAVA]十四种Java开发工具点评
- Java应用程序中创建图像
- 传智播客学习之java反射
- Java基础教程之HelloWorld到面向对象