自定义注解日志耗时统计
自定义注解
@Target({ ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ServiceMonitor { }
自定义AOP
@Aspect @Component public class ServiceMonitorAspect { /** * 切点 * @annotation(com.alibaba.cloud.retail.item.normal.openapi.common.monitor.ServiceMonitor):匹配所有的方法上拥有ServiceMonitor注解的方法外部调用 * @within(com.alibaba.cloud.retail.item.normal.openapi.common.monitor.ServiceMonitor) : 匹配所有类上拥有ServiceMonitor注解的方法外部调用 */ @Pointcut("@annotation(com.zh.aop.ServiceMonitor)" + "|| @within(com.zh.aop.ServiceMonitor)") public void pointCut() { } /** * 环绕通知 */ @Around("pointCut()") public Object around(ProceedingJoinPoint joinPoint) { try { StopWatch stopWatch = new StopWatch(); stopWatch.start(); Object proceed = joinPoint.proceed(); stopWatch.stop(); String className = joinPoint.getTarget().getClass().getSimpleName(); System.out.println("ServiceMonitorAspect_simpleName:{}"+className + "#"+joinPoint.getSignature().getName()+", timeMillis:{} ms"+stopWatch.getTotalTimeMillis()); return proceed; } catch (Throwable t) { System.out.println("ServiceMonitorAspect_error:"+ t); return ResultWrapper.fail("CATEGORY-F-001-00-99-001", "系统异常,请稍后重试"); } } }
使用
@ServiceMonitor @Service public class DemoServiceImpl implements DemoService { @Override public void hello() { System.out.println("DemoServiceImpl_hello"); hello2(); } public void hello2(){ System.out.println("DemoServiceImpl_hello2"); } }
注意:@within 匹配所有类上拥有ServiceMonitor注解的方法外部调用
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
python实现多层感知机(MLP)