自定義註解簡單計算方法耗時
阿新 • • 發佈:2018-12-28
一.需求來源
很多方法我們需要跟蹤它的時間消耗,但是頻繁的新增日誌又顯得很冗餘,因此使用註解來優雅的開啟計時功能
二.直接上程式碼
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 小結
這樣後續所有需要新增計時功能的方法,只需要一個註解就搞定了,是不是很方便,這裡只是最簡單的使用方法,我們可以在註解中攜帶更多的資訊,在註解解析器裡面做更多的通用邏輯處理,比如提供快取的能力,記錄日誌的能力等等,這樣即使後續該方面的邏輯需要修改,我們只需要在註解解析器這一個方法裡面修改就可以了,避免牽一髮而動全身。