自定義AOP,實現自動捕獲方法的執行時間
阿新 • • 發佈:2021-10-15
1.自定義Aspect
@Component @Aspect public class JournalServiceAspect { private static final Logger logger = LoggerFactory.getLogger(JournalServiceAspect.class); private final String POINT_CUT = "execution(* delta.config.controller..*(..))"; @Pointcut(POINT_CUT) private void pointcut(){} private ThreadLocal<Long> beginTime = new ThreadLocal<>(); @Before(value = POINT_CUT) public void before(JoinPoint joinPoint){ // logger.info("前置通知"); beginTime.set(System.currentTimeMillis()); } @After(value = POINT_CUT) public void doAfterAdvice(JoinPoint joinPoint){ String className = joinPoint.getSignature().getDeclaringType().getName(); String methodName = joinPoint.getSignature().getName(); logger.info("捕獲 {}#{} cost time : {}ms",className,methodName,System.currentTimeMillis() - beginTime.get()); } }
2.springboot aop的execution表示式詳解
切入點表示式說明
* delta.config.controller..*(..)
表示式說明
表示式說明
*:表示返回型別,*表示所有的型別
delta.config.controller:表示要攔截的包名,此處設定controller
..:表示包、子孫包下所有類的所有方法
*(..):其中*表示方法名,表示所有方法,後面括弧裡面表示方法的引數,..表示任何引數
原創:做時間的朋友