自定义注解简单计算方法耗时

一.需求来源

  • 很多方法我们需要跟踪它的时间消耗,但是频繁的添加日志又显得很冗余,因此使用注解来优雅的开启计时功能

二.直接上代码

2.1 首先添加依赖
<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>
    </dependencies>
2.2 然后定义一个注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface EnableCountTime {


}
2.3 再定义注解的解析器
@Component
@Aspect
public class EnableCountTimeAspect {

    @Around("@annotation(ect)")
    public Object doAround(ProceedingJoinPoint pjp, EnableCountTime ect) throws Throwable {
        long begin = System.currentTimeMillis();
        Object obj = pjp.proceed();
        String methodName = pjp.getSignature().getName();
        String className = pjp.getSignature().getDeclaringTypeName();
        System.out.println(className + "." + methodName + " 方法消耗时间:" + (System.currentTimeMillis() - begin) + " ms");
        return obj;
    }
}
2.4 测试
@RestController
@RequestMapping("/test")
public class HelloController {

    @EnableCountTime
    @GetMapping("/a")
    public String testA(){
        return "hello a!";
    }
}

浏览器访问/test/a接口,即可打印如下:
com.intellif.mozping.controller.HelloController.testA 方法消耗时间:1 ms
2.5 小结
  • 这样后续所有需要添加计时功能的方法,只需要一个注解就搞定了,是不是很方便,这里只是最简单的使用方法,我们可以在注解中携带更多的信息,在注解解析器里面做更多的通用逻辑处理,比如提供缓存的能力,记录日志的能力等等,这样即使后续该方面的逻辑需要修改,我们只需要在注解解析器这一个方法里面修改就可以了,避免牵一发而动全身。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值